假设我有这样的代码,假设 db.get()
是一个 promise 的 API:
var promises = [];
for( var i = 0; i < 10; i++ ){
promises.push( getFromDatabase("age") );
}
Q.all(promises).then(function(results){
// something
},function(error){
log.error( error )
});
function getFromDatabase(property){
return db.get(property).then(function(result){
return result;
},function(error){
log.error( error )
})
}
谁来处理这个错误? Q.all()
Promise 链中的函数或 getFromDatabase()
Promise 链中的函数。
此外,如果存在像 Q.all()
中那样的顶级错误处理程序,是否需要在辅助函数中处理错误?
最佳答案
Who'll handle the error? The function in promise chain of Q.all() or the function in promise chain of getFromDatabase().
使用问题中的代码,错误将由 getFromDatabase()
的错误处理程序处理。但就您而言,错误也不会进一步传播到 Q.all() 的错误,因为您基本上在那里处理错误并且永远不会进一步传递错误。
Also, if there is a top level error handler like in Q.all(), is there a need for handling error in helper functions?
这取决于您的业务逻辑以及您希望应用程序实现什么行为。也许您想在内部 getFromDatabase 错误处理程序中记录错误,并将失败进一步传递到外部处理程序以获得 UI 渲染的正确错误消息。由你决定。但在这种情况下,您需要重新抛出错误或从内部处理程序返回拒绝的 promise :
Q.all(promises).then(function(results){
// something
},function(error){
// Render error message for UI, etc.
});
function getFromDatabase(property){
return db.get(property).then(function(result){
return result;
},function(error){
// just log here
log.error(error);
throw error;
})
}
关于javascript - Promise 错误处理基础知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37375778/