繁体   English   中英

在 Javascript 数组映射中使用 promise 函数

[英]Using promise function inside Javascript Array map

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

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

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

当然这不起作用,输出数组是 [undefined, undefined]

解决此类问题的最佳方法是什么? 我不介意使用其他库,例如 async

将您的数组映射到 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)
})

您没有在map函数中返回您的 Promises。

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

使用异步/等待的示例:

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

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

您还可以使用p-map 库来处理 map 函数中的 Promise。

当您需要同时使用不同的输入多次运行 promise-returning 和 async 函数时很有用。

这与 Promise.all() 的不同之处在于您可以控制并发并决定是否在出现错误时停止迭代。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM