我有一个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。
答案 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);
}