我有一个使用此功能在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);
}