在for循环中链接mongoose promises

时间:2016-06-29 23:43:46

标签: javascript node.js mongoose promise es6-promise

我有一个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没有返回一个promise,我真的不知道如何链接create2中Location.create返回的promise。

1 个答案:

答案 0 :(得分:1)

使create2返回一个承诺的方法是Promise.all(),当传递给它的Promise数组全部完成时,它就会被实现。像这样......

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