Javascript 如何使用asyn重构nodejs代码并避免回调地狱

Javascript 如何使用asyn重构nodejs代码并避免回调地狱,javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,我对node比较陌生,并且正在尝试学习如何异步或承诺或任何使我的代码更好的方法。 下面是我的代码示例 router.post('/delete', function (req, res) { var bus_id = req.body.selected[0]; Bus.remove({_id: bus_id}, function (err) { if (err) { res.json({status: "error"

我对node比较陌生,并且正在尝试学习如何异步或承诺或任何使我的代码更好的方法。 下面是我的代码示例

router.post('/delete', function (req, res) {
    var bus_id = req.body.selected[0];
        Bus.remove({_id: bus_id}, function (err) {
            if (err) {
                res.json({status: "error", message: "please enter a valid bus_id"});
            } else {
                User.remove({refid:bus_id},function(err){
                    if (err) {
                        res.json({status: "error", message: "bus user wasn't deleted"});
                        return;
                    } else {
                        res.json({status: "success",message: "bus and bus user were deleted"});
                    }
                });
            }
        });
});

我读过关于异步和承诺的书,什么是应用于我的代码的最佳方式?

我个人会选择承诺。它可能看起来像这样

router.post('/delete', function (req, res) {
  var bus_id = req.body.selected[0];

  Bus.remove({_id: bus_id}).exec().then(function(bussRemoved) {
    return User.remove({refid: bus_id}).exec();
  }).then(function(userRemoved) {
    res.json({status: "success",message: "bus and bus user were deleted"});
  }).catch(function (err) {
    res.json({status: "error", message: "please enter a valid bus_id"});
  });
});

我个人会信守诺言。它可能看起来像这样

router.post('/delete', function (req, res) {
  var bus_id = req.body.selected[0];

  Bus.remove({_id: bus_id}).exec().then(function(bussRemoved) {
    return User.remove({refid: bus_id}).exec();
  }).then(function(userRemoved) {
    res.json({status: "success",message: "bus and bus user were deleted"});
  }).catch(function (err) {
    res.json({status: "error", message: "please enter a valid bus_id"});
  });
});