javascript - Promise 错误处理基础知识

标签 javascript node.js error-handling promise q

假设我有这样的代码,假设 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/

相关文章:

javascript - Swagger 'GET' 请求总是以 text/html 形式返回 Accept type on response 而不是 application/json

node.js - 是否可以将自动搜索字段从硬编码 'suggestions' 更改为数据库中的数据?

javascript - FullCalendar 自定义标题标题

javascript - 在辅助监视器上使用 javascript 检测监视器分辨率

javascript - Chrome 和 Node.js 中的全局范围

javascript - 类中的事件未调用 NodeJS EventEmitter

c++ - 当可以返回错误/异常时,从库中终止调用程序(例如,调用 exit())总是错误的吗?

laravel - 无法在PC上访问网站,但可以在Mobiles上正常工作

python - 在Python函数中不使用try/except的错误处理

javascript - 为什么 JSON 很重要?