如何将索引器从外部for循环传递到for循环中的回调函数。我的函数是client.get()(请参阅我的代码以获得所需的输出)。
some_array = ['a', 'b', 'c'];
for(var i = 0; i < some_array.length; i++){
console.log(some_array[i]); // This prints a, b, c as expected
client.get("http://foo/" + some_array[i] + "/bar", function (data, response) {
console.log(some_array[i]); // THE PROBLEM: This prints undefind, I need it to print the exact same as the first console.log() statement
console.log(i); // This also prints undefined
console.log(some_array); // This prints ['a', 'b', 'c']
}
}
由于some_array是全局的,我可以在回调中打印它,但是,我无法访问some_array中的任何元素,我该怎么做?
答案 0 :(得分:3)
最简单的方法是使用let
而不是var为你增加..
for(let i = 0; i < some_array.length; i++){
/// code here...
}
由于let
是块范围,因此即使在异步函数的回调函数中,它也与块中的任何位置相同。
这是一个使用异步函数循环的示例,以演示差异。
var a = [1,2,3,4];
for(let i=0; i<a.length; i++){
setTimeout(function(){
console.log("Using let", a[i]);
}, 50);
}
for(var i=0; i<a.length; i++){
setTimeout(function(){
console.log("Using var", a[i]);
}, 50);
}