我有一个使用此功能在mongodb中创建新文档的api:

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调用第一个create函数的promise上的create2函数,如下所示:

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


问题是create2不会返回承诺,而且我真的不知道如何在create2中链接Location.create返回的承诺?

最佳答案

使create2返回承诺的方式是使用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);
}

09-19 19:42