我想做一个 if else 返回(对于 conrtole),但是:“UnhandledPromiseRejectionWarning:未处理的 promise 拒绝(拒绝 id:1):错误:发送后无法设置 header 。 ”
exports.delete = function (req, res) {
Parking.findById(req.params.id).exec()
.then(function (parking) {
if (userController.ensureAuthorized(req, 'Director', parking.id)) {
return parking;
}
return res.status(403).send({msg: 'unauthorized'});
})
.then(function (parking) {
User.update().exec();
return parking;
})
.then(function (parking) {
return Parking.remove({_id: parking._id}).exec();
})
.then(function () {
res.status(200).json({msg: 'Ok ! Parkink remove'});
})
.catch(function (err) {
return res.status(400).send(err);
});
};
泰
最佳答案
问题是,在返回 res.status(403)
后,promise 链不会自动停止。最终,它将命中 res.status(200)
并导致错误。
您可以稍微重写您的 promise 链以防止这种情况发生。我不确定 User.update().exec()
的目的是什么,但我假设您想调用它并等待它的 promise 得到解决,然后再继续:
exports.delete = function (req, res) {
Parking.findById(req.params.id).exec()
.then(function (parking) {
if (userController.ensureAuthorized(req, 'Director', parking.id)) {
return User.update(...).exec().then(function() {
return Parking.remove({_id: parking._id}).exec();
}).then(function() {
return res.status(200).json({msg: 'Ok ! Parkink remove'});
});
} else {
return res.status(403).send({msg: 'unauthorized'});
}
}).catch(function (err) {
return res.status(400).send(err);
});
};
关于javascript - 未处理的 promise 拒绝错误: Can't set headers after they are sent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43366237/