【问题标题】:Using promise function inside Javascript Array map在 Javascript 数组映射中使用 promise 函数
【发布时间】:2017-01-19 23:53:51
【问题描述】:

拥有一个对象数组 [obj1, obj2]

我想使用 Map 函数对所有这些对象进行数据库查询(使用 Promise)并将查询结果附加到每个对象。

[obj1, obj2].map(function(obj){
  db.query('obj1.id').then(function(results){
     obj1.rows = results
     return obj1
  })
})

当然这样不行,输出数组是[undefined, undefined]

解决此类问题的最佳方法是什么?我不介意使用异步等其他库

【问题讨论】:

  • 这个问题不应该被标记为重复。这个问题专门关于在map 中使用承诺,不是一般来说异步是如何工作的。

标签: javascript arrays promise


【解决方案1】:

将您的数组映射到 Promise,然后您可以使用 Promise.all() 函数:

var promises = [obj1, obj2].map(function(obj){
  return db.query('obj1.id').then(function(results){
     obj1.rows = results
     return obj1
  })
})
Promise.all(promises).then(function(results) {
    console.log(results)
})

【讨论】:

    【解决方案2】:

    你没有在 map 函数中返回你的 Promise。

    [obj1, obj2].map(function(obj){
      return db.query('obj1.id').then(function(results){
         obj1.rows = results
         return obj1
      })
    })
    

    【讨论】:

      【解决方案3】:

      使用异步/等待的示例:

      const mappedArray = await Promise.all(
        array.map(p => {
          return getPromise(p).then(i => i.Item);
        })
      );
      

      【讨论】:

        【解决方案4】:

        您也可以使用for await 代替map,并在其中解决您的承诺。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-12-16
          • 2012-04-13
          • 2022-01-15
          • 2011-08-04
          • 1970-01-01
          • 1970-01-01
          • 2016-02-28
          相关资源
          最近更新 更多