返回嵌套的错误,并承诺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一点。