当forEach遇到async/await

2021-07-14  本文已影响0人  shanshanfei
// 开发中遇到下面的问题 发现没有按照预期的执行
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

上一篇 下一篇

猜你喜欢

热点阅读