我有以下情况:如何在请求调用时将值传递给回调函数?
var foo = [ 0, 1, 2 ]
for (var i in foo) {
Asyncstuff.get(URI).on('response', function(res) { console.log(i); } });
}
因为。对(“回应”,...)被调用以异步方式,输出将最有可能
2
2
2
有在.get()被调用到回调函数时可能会传递值i?
我有以下情况:如何在请求调用时将值传递给回调函数?
var foo = [ 0, 1, 2 ]
for (var i in foo) {
Asyncstuff.get(URI).on('response', function(res) { console.log(i); } });
}
因为。对(“回应”,...)被调用以异步方式,输出将最有可能
2
2
2
有在.get()被调用到回调函数时可能会传递值i?
您需要关闭。还有比这更好的方法,但应清楚地说明这个概念:
var foo = [ 0, 1, 2 ]
for (var i in foo) {
(function(i){
Asyncstuff.get(URI).on('response', function(res) { console.log(i); } });
})(i);
}
正如cwolves提到你需要使用闭包包裹。原因是JavaScript和其他语言(例如:C#)封闭捕获“变量”而不是“值”,因此在代码中,变量“i”被内部函数捕获,并且当该函数执行时,它使用捕获的变量“i”显然会在循环结束时成为循环中的最后一个值。在使用JavaScript等捕获变量的语言中使用闭包时,您需要小心。
在cwolves解决方案中,函数中的“i”成为一个新变量,与for循环中的I不同,因此它工作正常。
Using recursive pattern loop with node.js
请参阅我的回答,我相信有您的控制for循环
你可以用它来解决你的问题