如何在用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在继续之前等待结果

Javascript等待Promise在返回响应之前完成for循环

在返回函数的变量之前,如何等待 promise 完成?

在返回结果之前等待 AsyncTask.execute(()) 完成

完成处理程序在运行另一个任务之前完成任务