我对从函数调用返回错误感到困惑。 例如,我使用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的块。但是,如果我必须做一些操作,如:
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
})
}
我尝试过使用throw错误,返回错误并删除内部catch块,但在两种情况下 - 执行都会在first_ctrl中阻塞,而resultData已经收到了错误对象。
这种情况的最佳做法是什么,因为这些嵌套调用可以更深入(first_ctrl - > second_ctrl - > third_ctrl)
让我知道。期待您的想法
答案 0 :(得分:1)
尚未完整答案,但希望能帮助您走上正轨。
你的核心理念是对的。以下代码有效:
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
因此,我可以想象的事情可能是我们问题的原因:
希望这有助于至少一点。