在 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);
}
我有一个 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);
}