javascript - 将索引器传递到回调中的问题

标签 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 中的任何元素,我该怎么做?

最佳答案

最简单的方法是使用let而不是增量变量 var ..

for(let i = 0; i < some_array.length; i++){
  /// code here...
}

由于 let 是 block 作用域,因此它在 block 中的任何位置都是相同的,即使在异步函数的回调中也是如此。

这是一个使用异步函数循环的示例,以演示差异。

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

关于javascript - 将索引器传递到回调中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48918696/

相关文章:

javascript - 如何从桌面通知中覆盖或删除签名 "electron.app.Electron"

Android onCreate 死锁

node.js - 有条件地执行回调

javascript - 使用ajax无需刷新页面即可显示数据库记录

node.js - 如何使用进度条快速上传大文件?

javascript - Data.map 不是一个函数

javascript - 有没有更合适的方法来使用 AJAX 处理错误?

javascript - 谷歌Firestore : Filter documents where sub-key is between given value

javascript - 如何在 JavaScript 中生成随机数并将其分配给我的变量数组?

javascript - 当我向下滚动时,元素附加到父元素。但是,当向上滚动时,如何返回原始状态?