如何从javascript中array.map中的异步函数返回值?

时间:2019-03-25 13:55:11

标签: javascript arrays

如何从array.map中的异步函数返回值,我试图从它们中访问值,但是却得到数组[[object Promise], [object Promise], [object Promise], [object Promise]]

我想在array1.map内部进行异步处理,因为我有一些过程需要花费一些时间,因此我需要使用await。

var array1 = [1, 4, 9, 16];

// pass a function to map
const test = async ()=>{
const map1 = await array1.map(async x => 'hi');

return map1;
// expected output: Array [2, 8, 18, 32]
}
test().then((data)=>{
console.log(data)
})

预期输出:阵列['hi', 'hi', 'hi', 'hi'] 我的输出:[[object Promise], [object Promise], [object Promise], [object Promise]]

3 个答案:

答案 0 :(得分:0)

您需要使用Promise.all函数,在其中放置承诺数组

var array1 = [1, 4, 9, 16];

// pass a function to map
const test = async () => {
  const map1 = await Promise.all(array1.map(async x => 'hi'));
  return map1;
}

test().then((data) => {
  console.log(data)
});

  

预期输出:数组['hi','hi','hi','hi']

答案 1 :(得分:0)

解决方案1 ​​

如果在地图高阶函数中放置等待,您将得到预期的结果

var array1 = [1, 4, 9, 16];

// pass a function to map
const test = async () => {
  const map1 = await Promise.all(array1.map( async x =>await  'hi'));
  return map1;
}

test().then((data) => {
  console.log(data)
});

解决方案2

如果从高阶函数参数中删除异步,则将获得预期的输出。

var array1 = [1、4、9、16];

// pass a function to map
const test = async () => {
  const map1 = await Promise.all(array1.map( x => 'hi'));
  return map1;
}

test().then((data) => {
  console.log(data)
});

答案 2 :(得分:0)

您可以使用async模块中的async.map。 async.map函数带有三个参数。

  1. 要遍历的数组。
  2. 要为数组中的每个项目执行的函数。
  3. 所有迭代完成后要执行的回调。