在Node.js中异步添加到数组

sir*_*one 4 arrays asynchronous callback node.js

我对这种类型的编程很新,我在嵌套调用中填充数组时遇到了一些麻烦.我很确定这需要使用回调来完成,但是我在绕着它缠绕脑子时遇到了麻烦.关闭也必须在这里发挥作用.我尝试在网上搜索类似的例子,但没有找到太多.

这是我的原始代码.我尝试了一些不同的方法,但没有把它拉下来.

TaskSchema.statics.formatAssignee = function(assignees) {
  var users = [];

  assignees.forEach(function(uid) {
    mongoose.model('User').findById(uid, function(err, user) {
      users.push({
          name: user.name.full
        , id: user.id
      });
    });
  });

  return users;
}
Run Code Online (Sandbox Code Playgroud)

Adr*_*ien 6

我非常喜欢以下模式(递归是异步循环最优雅的解决方案):

TaskSchema.statics.formatAssignee = function(assignees, callback) {
  var acc = []
    , uids = assignees.slice()
  (function next(){
    if (!uids.length) return callback(null, acc);

    var uid = uids.pop()
    mongoose.model('User').findById(uid, function(err, user) {
      if (err) return callback(err);
      acc.push({
        name: user.name.full
      , id: user.id
      });
      next();
    });
  })();
}
Run Code Online (Sandbox Code Playgroud)