1
node.js에서 비동기 콜백 이벤트를 테스트하기 위해 다음 예제를 구성했습니다. 사실은 오류가 나에게 매개 변수를 반환하지 않는다는 것입니다. 왜 그런가요?노드 비동기 함수 예제가 있습니다. 예상 값이 아닌 콜백 반환
var maxtime = 1000;
var evenDoubler = function(v, callback) {
var waitTime = Math.floor(Math.random() * (maxtime + 1));
if (v%2) {
setTimeout(function() {
callback(new Error("Odd input"));
}, waitTime);
}
else {
setTimeout(function() {
callback(null, v*2, waitTime);
}, waitTime);
}
}
for (i=1;i<=10;i++) {
evenDoubler(i, function (error, result, waitTime) {
if (error){
console.log(error + " by number " + i);
}
else {
console.log("The number is even, and its double is " + result + " (in " + waitTime + " miliseconds).");
}
});
}
반환 된 출력은 (왜 홀수에 나에게 값 (11)을 반환?)
당신의for
루프가 이미 시간에 완료 때문입니다
Error: Odd input by number 11
Error: Odd input by number 11
The number is even, and its double is 20 (in 266 miliseconds).
The number is even, and its double is 12 (in 444 miliseconds).
Error: Odd input by number 11
The number is even, and its double is 4 (in 492 miliseconds).
The number is even, and its double is 16 (in 578 miliseconds).
The number is even, and its double is 8 (in 710 miliseconds).
Error: Odd input by number 11
Error: Odd input by number 11
네, 그래. 물론 11 번째 숫자가 그 시점에서 루프가 이미 완료되었음을 알 수 있습니다. 제가 알고 싶었던 것은 이것이 일어날 이유였습니다. 왜냐하면 내가 예상 한 것은 변수의 단 일 증가와 모든 루프에 대한 실제 값의 로깅 이었기 때문입니다. –
내가 지금 알고있는 것은 이것이 "모든 루프에 대해 잠긴 변수가 아닙니다"라는 것입니다.이 변수는 IIFE를 사용하여 해결됩니다 (모든 루프에 대한 변수 잠금). –