// 开发中遇到下面的问题 发现没有按照预期的执行
async function getInfos() {
const results = [];
const files = fs.readdir(dirname);
// 并没有按照预期的串行执行 而是并行执行了
files.forEach(async (file) => {
const someInfo = await getOtherInfo(file);
results.push(someInfo);
});
return results;
}
const results = await getInfos(); // 拿到[]
// 原因:forEach的callback函数是同步的 每次循环都是一个新的generator函数 上一次循环和这一次循环的*function没有关联,也就无法做到串行。解决方法是使用支持iterator的for...of替换即可实现串行
async function getInfos() {
const results = [];
const files = fs.readdir(dirname);
// 并没有按照预期的串行执行 而是并行执行了
for(const file of fiels){
const someInfo = await getOtherInfo(file);
results.push(someInfo);
});
return results;
}
const results = await getInfos(); // 可正常拿到结果[{...}, {...}]
参考:
https://stackoverflow.com/questions/37576685/using-async-await-with-a-foreach-loop