循环使用异步调用

时间:2017-04-20 08:26:58

标签: javascript asynchronous

当我在for循环中异步函数时,我无法获得for循环的索引。这是我的代码:

for (var i = 0; i < details.waypoints.meta.length; i++) {
    for (var j = start_index; j < i; j++) {
        (function (cntr) {
            fs.readFile(Path.join(__dirname, "/../../Modified_Data.json"), "utf8", function readFileCallback(err, data) {
                if (err) {
                    console.log(err);
                    return;
                } else {
                    console.log(cntr) //printing the index
                }
            });
        })(j);
    }
}      

我得到的索引的顺序不正确: 1 3 0 2 4 五 6 7 8 9

1 个答案:

答案 0 :(得分:0)

您可以使用promises和Promise.all函数触发一堆异步请求,并按照所请求的顺序获取结果,如果一切成功的话。看起来你没有使用任何循环值接受索引。

const readFilePromise = x => new Promise((resolve, reject) => {
  const path = Path.join(__dirname, "/../../Modified_Data.json")
  fs.readFile(path, 'utf8', (err, data) => {
    if (err) {
      return reject(err)
    }
    resolve(data)
  })
})

Promise.all(
  details.waypoints.meta.map(readFilePromise)
)
.then(data => {
  data.forEach((x, i) => console.log(x, i))
})
.catch(err => console.error(err))