gpt4 book ai didi

node.js - Node Promise拒绝不进入catch

转载 作者:可可西里 更新时间:2023-11-01 10:40:05 26 4
gpt4 key购买 nike

我有一个在 mongoDB 上调用 findByIdAndRemove 的方法。万一我找不到 ID,因此无法从数据库中删除它,我想抛出一个错误。

删除仪表板功能:

deleteDashboard = (id) => {
return Dashboard.findByIdAndRemove(id).exec((err, dashboard) => {
if (err) return errorHandler.handle('dashboardService', err);
if (dashboard === null) return Promise.reject({ status: 404, message: 'not found' });

return Promise.resolve(dashboard);
});
};

函数调用:

return dashboardService.deleteDashboard(id)
.then(dashboard => res.status(200).json(dashboard))
.catch(error => res.status(error.status).json(error));

我不明白为什么用不在数据库中的 ID 调用 dashboardService.deleteDashboard 不会进入 catch。调试时,我检查是否进入了 if(dashboard === null) 条件并因此调用了 Promise.reject(),但随后它进入了 then 而不是 catch

最佳答案

我觉得问题出在这里:

return Dashboard.findByIdAndRemove(id).exec((err, dashboard) => {

通常,当您使用 promise 时,您不会传递回调。尝试将其更改为

deleteDashboard = (id) => {
return Dashboard.findByIdAndRemove(id).exec()
.then(dashboard => {
if (dashboard === null) return Promise.reject({ status: 404, message: 'not found' });
return dashboard;
})
.catch(err => {
return errorHandler.handle('dashboardService', err);
})
};

我尽量保持大部分代码不变。只是更改了 promise 的回调和 catch 的错误句柄。

关于node.js - Node Promise拒绝不进入catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47438254/

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