在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)