var membersStatArray = [];
membersArray.forEach(function(member) {
db.doneTodo
.find({ 'victor._id': member._id })
.then((arrayOfUserVictories) => {
membersStatArray.push({
email: member.email,
victories: arrayOfUserVictories.length
});
})
});
console.log(membersStatArray);
它不是重要的是什么db。
我知道NodeJS是异步的,但是什么是添加到数组然后打印数组的方法?
现在发生的是,
console.log(membersStatArray) --> []
因为它需要空数组。
过去是什么方式?
答案 0 :(得分:1)
修改您的代码,以便它使用Promise.all
将所有承诺收集到一个承诺中,这将在所有单个承诺解决后解决:
Promise.all(membersArray.map((member) => {
return db
.doneTodo
.find({'victor._id': member._id})
.then((userVictories) => ({
email: member.email,
victories: userVictories.length
}));
})).then((memberStats) => {
console.log(membersStats);
});
答案 1 :(得分:1)
您也可以使用async
。
var async = require("async");
var membersStatArray = [];
async.each(membersArray,
function(member, callback){
db.doneTodo.find({'victor._id': member._id}).then((arrayOfUserVictories) =>{
membersStatArray.push({email: member.email, victories: arrayOfUserVictories.length});
callback();
})
},
function(err){
console.log(membersStatArray);
}
);