我有一个节点异步函数的例子.回调函数返回不期望的值



我编写了以下示例来测试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)路径

最新更新