我目前有一个创建新冒险的创建方法,保存它,然后将生成的冒险ID添加到用户。唯一的问题是,它有嵌套的承诺,我想知道是否有办法防止这种情况发生。代码:
function create(req, res) {
new Adventure(req.body)
.save()
.then(function (result) {
User.findByIdAndUpdate(
result.dm_id,
{ $push: { adventures: result._id }}
)
.exec()
.catch(fail); // FIXME: nested promises :(
res.status(200).send(result);
})
.catch(fail);
}
我认为这里的问题是我需要将回复与我创建的冒险一起发回,而不是我添加冒险的用户。
谢谢!
答案 0 :(得分:0)
如果你返回.exec返回的(你的代码暗示)的承诺 - 那么你应该可以做这样的事情
function create(req, res) {
new Adventure(req.body)
.save()
.then(function (result) {
var ret = User.findByIdAndUpdate(result.dm_id, { $push: { adventures: result._id }}).exec();
res.status(200).send(result);
return ret;
})
.catch(fail);
}
或
function create(req, res) {
new Adventure(req.body)
.save()
.then(function (result) {
res.status(200).send(result);
return User.findByIdAndUpdate(result.dm_id, { $push: { adventures: result._id }}).exec();
})
.catch(fail);
}
不确定它是否有效"在res.status
行之前使用findByIdAndUpdate
行,因此第二个代码块可能是错误的