将索引器传递给回调

时间:2018-02-22 02:30:36

标签: javascript node.js callback

如何将索引器从外部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中的任何元素,我该怎么做?

1 个答案:

答案 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);
}