我有一个节点asynchronous函数的例子。 返回不是预期值的callback函数

我已经组成了以下示例来testingnode.js中的asynchronouscallback事件。 事实是,错误不是返回给我一个参数。 这是为什么?

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循环已经完成了第一次asynchronouscallback的时间,所以i是在那个点11,这就是为什么得到logging奇数的if (error)path。