在 for 循环中链接猫鼬承诺

Chaining mongoose promises in a for loop

我有一个 api 使用此函数在 mongodb 中创建一个新文档:

export function create(req, res) {
  return Track.create(req.body)
    .then(respondWithResult(res, 201))
    .catch(handleError(res));
}

这只是添加了一个新文档,我想扩展它,在添加文档之后,我想使用响应中的信息将更多文档添加到另一个集合中,如下所示:

export function create2(info) {
  var trackId = info._id;
  var users = info.users;

  var basic = {
    trackId : trackId
  };

  for (let user of users) {
    basic.username = user.username;

    Location.create(basic);
  }
}

我想在第一个创建函数的承诺的 .then 上调用 create2 函数,如下所示:

export function create(req, res) {
  return Track.create(req.body)
    .then(create2)
    .then(respondWithResult(res, 201))
    .catch(handleError(res));
}

问题是 create2 没有 return 承诺,我真的不知道如何在 create2 中链接 return 由 Location.create 编辑的承诺?

使 create2 return 成为承诺的方法是使用 Promise.all(),当传递给它的承诺数组全部实现时,它就会实现。像这样...

var _ = require('underscore');   // optional but useful for a better loop with '.map'

export function create2(info) {
  var trackId = info._id;
  var users = info.users;

  var basic = {
    trackId : trackId
  };

  var promises = _.map(users, function(user) {
    basic.username = user.username;
    return Location.create(basic);
  });
  return Promise.all(promises);
}