Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS承诺:错误处理概念_Javascript_Error Handling_Promise - Fatal编程技术网

Javascript JS承诺:错误处理概念

Javascript JS承诺:错误处理概念,javascript,error-handling,promise,Javascript,Error Handling,Promise,我有一个处理ajax调用的函数,另一个处理错误的函数。目标是:将错误处理为更好的格式,以便以后使用(请参见下面的示例) 问题是:.then()的第二次回调没有被调用 守则: function _handleError(error) { //bring error info in better usable format ... return errorRes; } function getSth(...) { ... return $.ajax({

我有一个处理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()
的第二个函数永远不会被调用,
\u handleError()
是。我很确定我误解了承诺的一些概念。

如果在调用
\u handleError
后,您希望承诺链继续被拒绝,那么您需要
抛出
或从
\u 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;
}