NodeJS阵列同步?

时间:2016-12-31 05:02:35

标签: arrays node.js

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) --> [] 

因为它需要空数组。

过去是什么方式?

2 个答案:

答案 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);
  }
);