关于不能在forEach中使用await的问题

在一次开发中,写了类似下面的代码

const arr = [3,2,1] 数组中的具体内容就不写了 ,只需知道arr是一个数组就行
遍历数组
arr.forEeach(async() =>{
const data = await getData()  // 
console.log(""start,res)
})

console.log("end")

function getData(x) {
 return new Promise((resolve, reject) => {
  setTimeout(() => {
   resolve(x)
  }, 500 * x)
 })
}

预计的输出结果是

3
2
1
end

实际上的结果是 1,2,3 end

原因是 forEach 只支持同步代码。不会去处理异步的情况。

解决办法
当然你可以使用 Promise.all,但是感觉比较麻烦
所有我使用的是 for…of 来解决

async function test() {
 let arr = [3, 2, 1]
 for (const item of arr) {
  const res = await fetch(item)
  console.log(res)
 }
 console.log('end')
}
这样就可有正常输出了

原因是 for…of 内部处理的机制和 forEach 不同,forEach 是直接调用回调函数,for…of 是通过迭代器的方式去遍历。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值