JS Promises:错误处理概念

时间:2017-05-01 15:06:38

标签: javascript error-handling promise

我有一个执行ajax调用的函数,另一个处理错误的函数。目标是:将错误操作为更好的格式以便稍后使用(参见下面的示例)。

问题:虽然没有调用.then()的第二个回调。

代码:

function _handleError(error) {
    //bring error info in better usable format
    ...

    return errorRes;
}

function getSth(...) {
    ...
    return $.ajax({
        url: baseUrl + query,
        type: "GET",
        headers: {
           ...
        }
    }).then(function (data) {
        var results = data.d.results;

        ... //Do mapping stuff

        return results;
    }, _handleError);
}

我想如何实现它:

getSth(...).then(function(results){
    ...
}, function(err){
    console.log(err);
    ... //Do more with error info
});

.then()的第二个函数永远不会被调用,_handleError()就是这样。我很确定我误解了Promise的概念。

1 个答案:

答案 0 :(得分:1)

如果在调用_handleError之后,您希望承诺链继续被拒绝,那么您需要throw或从_handleError内返回被拒绝的承诺。

如果您没有返回任何内容或仅从handleError返回正常值,则Promise基础结构会假定您“处理”了错误并且不再是错误。这是在try/catch之后建模的,如果您catch出现错误并且没有重新抛出,则该异常被视为已处理且不会传播到更高级别。

示例:

function _handleError(err) {
    // do something to the error value
    let newError = new Error(...);

    // rethrow the error so the promise continues as rejected
    // and so that the next error handler on that promise chain will get called
    throw newError;
}