美文网首页
当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