记录一个javascript中map/forEach循环中await未生效的问题

   今天项目中,发现在map循环使用了await,并未生效,循环体后代码优先执行了的问题。

   

      a.map(async (item) => {
        await function_a();
        console.log("a");
      })
      console.log("b");

 结果输出了

b
a

   具体原理是,可能map/forEach内部使用了while结合callback方式来执行函数,await不会等待callback的执行。

   所以解决方式有两种:

   1.使用Promise.all来包裹执行 

      await Promise.all(a.map(async (item) => {
        await function_a();
        console.log("a");
      }));
      console.log("b");

 

  2.使用传统的for来执行

      for(let i = 0 ; i < a.length ; i++){
        await function_a();
        console.log("a");
      }
      console.log("b");

 

posted @ 2020-08-24 15:18  MythosMa_Web  阅读(1093)  评论(0)    收藏  举报