当我在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
答案 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))