节点承诺拒绝不进入捕获

我有一个在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。