返回嵌套的错误,并承诺ExpressJS / NodeJs

我从函数调用返回错误有点混淆。 例如,我使用sequelizeJS来说明这一点。 一般:

First.Ctrl

var second_ctrl = require( '../ctrl/second'); testCode : function(req, res, next){ return second_ctrl.getData() .then(function(resultData){ res.json(resultData); }) .catch(function(error){ res.json(error) }) } 

Second.Ctrl

 getData : function(){ return models.Data.findAll() } 

getData findAll中的任何错误都会转到first_ctrl的catch块。 但是,如果我必须做一些操作,如:

Second.Ctrl – 操作

 getData : function(){ return models.Data.findAll() .then(function(result){ if(result == null) throw new Error ('No data found'); return result; }) .catch(function(error){ throw error; //return error }) } 

我已经尝试使用抛出错误,返回错误,并删除内部的catch块,但在这两种情况下 – 执行去first_ctrl阻止resultData收到错误的对象。

什么是这种情况下的最佳做法,因为这些嵌套的调用可以更深入(first_ctrl – > second_ctrl – > third_ctrl)

让我知道。 期待你的想法

还没有一个完整的答案,但希望可以帮助你走上正轨。

你的核心思想是正确的。 以下代码作品:

 const myPromise = Promise.reject(new Error('some error')) .then(res => console.log('inner then')) .catch(err => { console.log('inner err'); throw err }) .then(res => console.log('outer then')) .catch(err => console.log('outer err')); // logs: // inner err // outer err 

所以下面的事情我可以想象是可能的我们的问题的原因:

  • 你在外部catch块没有注意到它(你在那里调用res.json()以及在你的外部 – 那么你怎么知道哪一个被调用)
  • 你正在使用一个bug的承诺库。

希望这有助于至less一点。