NodeJS数组同步?
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);
不pipe什么分贝。
我知道NodeJS是asynchronous的,但是什么是添加到数组,然后打印数组?
现在发生的是,
console.log(membersStatArray) --> []
因为它需要空数组。
这是什么方式?
修改您的代码,使其使用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); });
您也可以使用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); } );