我有一个在mongoDB上调用findByIdAndRemove
的方法。如果我没有找到id,因此无法从DB中删除它,我想抛出一个错误。
删除仪表板功能:
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
。
答案 0 :(得分:1)
我认为问题在于:
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的错误句柄。