如何在用javascript返回结果之前完成.map? [复制]
Posted
技术标签:
【中文标题】如何在用javascript返回结果之前完成.map? [复制]【英文标题】:How to get .map to complete before returning result in javascript? [duplicate] 【发布时间】:2021-01-03 00:51:35 【问题描述】:我正在努力使用 .map 并等待。如何让下面的内容等到地图完成?
export async function buildDeviceArray(userIdList) //userIdList is an array of ids
await userIdList.map(myFunction2)
return deviceArray1 // returns straight away, rather than waiting for the .map to complete
async function myFunction2(item)
let user = await wixData.get("OurUsers", item)
let device = await wixData.get("Devices", user.deviceDefault)
let output = "label": device.deviceReference, "value": user.deviceDefault
if (user.deviceDefault) deviceArray1.push(output)
console.log(deviceArray1);
return
【问题讨论】:
您必须编写一个自定义的.map
函数来处理让回调函数返回承诺。默认的 .map
函数不是异步的,它只是用每个值返回的内容填充数组——所以此时,.map
的结果将只是一个承诺数组
看着@Oyeme 的回复,其实看起来Promise.all
是这里的救赎
【参考方案1】:
这是一个示例,说明如何将 .map
与异步回调函数一起使用。
var originalArray = [1,2,3,4];
async function multiplyBy2(x)
await new Promise(r => setTimeout(r, 5000)); // half second
return 2*x;
async function run()
var promiseArray = originalArray.map(multiplyBy2)
var answerArray = await Promise.all(promiseArray);
console.log(answerArray);
run();
【讨论】:
感谢@TKol,正如您在上面所说的那样 Promise.all 在调用函数之前是需要的以上是关于如何在用javascript返回结果之前完成.map? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在从 Swift 3 中的函数返回结果之前等待 URLSession 完成
Javascript等待Promise在返回响应之前完成for循环