JS Array.map方法内异步方法无法同步执行

当在JavaScript中使用array.map处理包含异步操作的数据时,map函数不会等待异步任务完成。可以改用for...of循环或Promise.all来确保异步操作按顺序或并行执行。例如,使用Promise.all将所有异步请求包装在map中,然后等待所有请求完成。
摘要由CSDN通过智能技术生成

在U订货处理数据时,经常要整合多个表的信息。通常我习惯用map来处理array,但是我发现array.map中需要异步处理数据时会遇到一些问题。

// 错误模拟示例
async () => {
  let arr = [1,2,3,4,5]
  let res = await arr.map(async (item) => {
    // map并发执行
    // 获取一个异步的接口
    await getSheetData(item).then(data => data.value)
    })
  }

map的执行异步的时候,map的内部不会等待异步执行的结果,而是快速遍历一遍数组,此时异步没有执行,不能及时获取到值。

那么如果我们确实需要对数组的每一项值进行异步处理时怎么做呢?

  • 使用for of 等替代map

for(let item of arr) {
    await getSheetData(item).then(data => data.value)
  }
  • 用promise.all包装

let promistList = await arr.map(async (item) => {
    await getSheetData(item).then(data => data.value)
    })
let res = promise.all(promistList) 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值