上代码
const arr = [1,2,3,4,5] function t(num) { return new Promise((resolve, reject) => { setTimeout(()=>{ console.log('定时器', num) resolve() }, 1000) }) }
目前需求。想先forEach执行完毕之后再打印end
arr.forEach(async (i) =>{ await t(1) }) console.log('end')
测试发现是先打印end再执行forEach里面的async await
查阅资料(百度)后发现forEach里面是异步执行。所以在怎么用async await也无法按照预期执行
因为forEach是异步,那就把forEach改成for in
for(let i in arr){ await t(i) } console.log('end')
需求处理ok了。再到性能优化环节
因为for里面用await的会先执行完毕再走循环,因此会串行执行接口
就好比如我这里每个请求耗时1s。加起来走完请求就5s了,在用户体验上很不友好。
这个时候就需要用到Promise.all()+map()了。 Promise.all()是啥自行查阅资料!
await Promise.all(arr.map(async i=> await t(i))) console.log('end')
需求解决
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。