【发布时间】:2017-05-17 00:57:48
【问题描述】:
我有这个代码:
db.group.findOne({_id: id}).then((groupFound) => {
var membersArray = groupFound.members;
Promise.all(membersArray.map((member) => {
return db
.doneTodo
.find({'victor._id': member._id})
.then((userVictories) => {
return {
email: member.email,
victories: userVictories.length
}
});
})).then(function (result) {
console.log(result);
});
数据库调用都是 MongoDB/Mongoose。
map函数返回的数组里面都是promise。
最后一次通话:
.then((userVictories) => {
return {
email: member.email,
victories: userVictories.length
}
})
返回一个承诺。
所以本质上,在拨打这个电话之后,我所拥有的是:
[promise1, promise2, promise3, ... , promise x]
如何将数组值更改为 promise1.then( (result)) 的值?
【问题讨论】:
-
不确定问题是什么?
result中的 promise 值应该与传递给Promise.all()、membersArray的可迭代对象的顺序相同。你有什么问题? -
@guest271314,我想知道后台进程。 Promise.all 如何处理所有的 Promise 并将实际的“返回”值映射到数组
-
“Promise.all 如何处理所有的 Promise 并将实际的“返回”值映射到数组中是什么意思?如果传递给
Promise.all()的可迭代元素是Promise,则传递已完成或已解决的Promise的值,否则将元素转换为Promise。请注意,Promise或转换为Promise的值不一定按顺序解析或拒绝,尽管返回的数组result将按照传递的可迭代的索引的顺序。 -
数组的每个成员都传递了一个 Promise?不,您的箭头函数为每个成员调用一次,传递该成员并返回一个承诺。 Map 创建一个新的结果数组(在你的情况下是 promises,但它们可以是任何东西)。
-
@user7361276
.map()不会将可迭代的值转换为Promise对象。你return { email: member.email, victories: userVictories.length }来自.then(),它还返回一个新的Promise对象,其值设置为返回的普通对象。结果数组元素是来自Promise.all()调用的Promise值。是否有.then()链接到db.group.findOne()调用?result是普通对象数组还是Promise对象?console.log(result)记录了什么?
标签: javascript node.js mongodb asynchronous