在 Javascript 数组映射中使用 promise 函数
Posted
技术标签:
【中文标题】在 Javascript 数组映射中使用 promise 函数【英文标题】:Using promise function inside Javascript Array map 【发布时间】: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
中使用承诺,不是一般来说异步是如何工作的。
【参考方案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
,并在其中解决您的承诺。
【讨论】:
以上是关于在 Javascript 数组映射中使用 promise 函数的主要内容,如果未能解决你的问题,请参考以下文章
[从`prom-client`模块导入`prom`,但已安装。如何“相应地导入prom-client”?
数组的性能包括与映射到对象并在 JavaScript 中访问它