gpt4 book ai didi

javascript - 未处理的 promise 拒绝错误: Can't set headers after they are sent

转载 作者:行者123 更新时间:2023-12-03 04:34:04 24 4
gpt4 key购买 nike

我想做一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com