【问题标题】:How to return a value from a async function in array.map in javascript?如何从javascript中array.map中的异步函数返回一个值?
【发布时间】:2019-03-26 19:32:04
【问题描述】:

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

我想在 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]]

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    您需要使用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']

    【讨论】:

      【解决方案2】:

      解决方案 1

      如果你把 await 放在 map 高阶函数中,你会得到预期的结果

      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

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

      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)
      });
      

      【讨论】:

      • 谢谢解决方案1适用于我的情况,因为我在array.map中有一些异步函数。
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-05
        • 2021-03-04
        • 2015-09-14
        • 1970-01-01
        • 1970-01-01
        • 2020-07-29
        • 2014-05-01
        • 2021-06-02
        相关资源
        最近更新 更多