尝试用mongoose查询取消承诺

时间:2016-02-20 04:56:52

标签: javascript mongoose

我目前有一个创建新冒险的创建方法,保存它,然后将生成的冒险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);
}

我认为这里的问题是我需要将回复与我创建的冒险一起发回,而不是我添加冒险的用户。

谢谢!

1 个答案:

答案 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行,因此第二个代码块可能是错误的