Arrays NodeJS阵列同步?

Arrays NodeJS阵列同步?,arrays,node.js,Arrays,Node.js,db是什么并不重要 我知道NodeJS是异步的,但是向数组中添加然后打印数组的方法是什么呢 现在发生的是, var membersStatArray = []; membersArray.forEach(function(member) { db.doneTodo .find({ 'victor._id': member._id }) .then((arrayOfUserVictories) => { membersStatA

db是什么并不重要

我知道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);
因为它接受空数组


过去的路是什么

修改代码,使其用于将所有承诺收集到一个承诺中,当所有单个承诺都已解决时,该承诺将得到解决:

console.log(membersStatArray) --> [] 

您也可以使用
async

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

node.js数组是同步的,但db调用不是,这对我来说是一种新方法。这张“地图”是什么?它在下面的文档中有定义。感谢您指导我完成!为什么我需要“return”符号?第一个return语句返回从函数链中得到的承诺,并将其存放到一个新数组中(由map指定)。第二个return语句用于更改promise返回的内容,以便它们使用所需的对象格式进行解析。和的文档也描述了如何处理回调的返回值。
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);
  }
);