美文网首页
当forEach遇到async/await

当forEach遇到async/await

作者: shanshanfei | 来源:发表于2021-07-14 11:01 被阅读0次
// 开发中遇到下面的问题 发现没有按照预期的执行
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

相关文章

网友评论

      本文标题:当forEach遇到async/await

      本文链接:https://www.haomeiwen.com/subject/adfypltx.html