节点承诺拒绝不进入捕获
我有一个在findByIdAndRemove
上调用findByIdAndRemove
的方法。 如果我没有findid,因此不能从数据库中删除它,我想抛出一个错误。
删除仪表板function:
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));
我不明白为什么调用dashboardService.deleteDashboard
ID不在数据库中,不input捕获。 在debugging的时候,我检查了是否进入了if(dashboard === null)
条件,并调用了Promise.reject()
,但是然后它进入了then
而不是catch
。
我认为问题在这里:
return Dashboard.findByIdAndRemove(id).exec((err, dashboard) => {
通常当你使用诺言时,你不会传递callback。 尝试改变它
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); }) };
我试图保持最原始的代码。 只是改变了承诺的callback,并为error handling。