我编写了以下示例来测试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 ?)
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
这是因为你的for
循环在第一次异步回调发生时已经完成了,所以i
在那一点上是11,这就是为什么它被记录为奇数的if (error)
路径