为了账号安全,请及时绑定邮箱和手机立即绑定

async/await 与 forEach 问题

async/await 与 forEach 问题

呼唤远方 2018-11-06 13:13:46
方法一:没问题    (async function () {         for (let i = 0; i < triggerArr.length; ++i) {             await sleep();             triggerArr[i]();         }     })();方法二:是一起输出来的,为什么?(没有等待)    const test = async function (item) {            await sleep();             item();     };     triggerArr.forEach(test);全部的代码
查看完整描述

1 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

我给你讲下。
await 只能用于 async 声明的函数上下文中. 如下 forEach 中, 是不能直接使用await的.

let array = [0,1,2,3,4,5];

(async ()=>{

  array.forEach(function(item){

    console.log(item);

    await wait(1000);//这是错误的写法

  });

})();

//因await只能用于 async 声明的函数上下文中, 故不能写在forEach内.下面我们来看正确的写法

(async ()=>{

  for(let i=0,len=array.length;i<len;i++){

    console.log(array[i]);

    await wait(1000);

  }

})();

仔细看下,发现你的问题是另外一种情况。
你这样把test当做回调函数传入进去,sleep方法是同步执行的,await还是生效的,只是同时生效。因此后续函数在等待相同的时间后,一起执行。

查看完整回答
反对 回复 2018-12-10
  • 1 回答
  • 0 关注
  • 539 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号