有可能识别/忽略一些拒绝/失败回调吗?

时间:2015-07-03 18:29:10

标签: jquery promise

由于jQuery.ajax api是$.Deferred()的扩展,我试图使用失败和完成的promise模式进行ajax调用。

$.ajax(..).done(..).fail(..)

用它来制作某种Api助手。

function ApiHelper() {

    ...
    this.get = function (path, data) {
        return ajax('GET', path, data);
    };
}

问题:

目前,我需要两种类型的错误处理。一些全局和一些指定。

如果没有特定错误,我想由全局失败处理。否则,由定义的那个。

我想做点什么:

apiHelper.get('path/to/api').done(function () {
  //all good
})

function globalHandler() {
  //everything goes wrong. notify here.

}    
apiHelper.get('path/to/api').done(function () {
  //all good
}).fail(function () {
  //everything goes wrong., notify here. and ingnore globalHandler.
})

是否有可能确定承诺是否失败,没有人处理它?或忽略一些失败的回调?

1 个答案:

答案 0 :(得分:2)

  

如果没有特定错误,我想由全局失败处理。   否则,由定义的那个。

注意,.ajaxComplete.ajaxError似乎在 .done.fail之后被称为

尝试为处理错误设置标记handled;利用 .ajaxComplete $.ajaxSetup()

var handled = false;

$.ajaxSetup({
    error: function (jqxhr, textStatus, errorThrown) {
        console.log("ajaxSetup:", errorThrown);
        // set , reset `handled` flag here
        handled = true
    }
});
// returns  error
var request = $.post("/echo/jsons/", {
    json: JSON.stringify(["abc"])
});
request.done(function (data) {
    console.log(data)
});
request.fail(function (jqxhr, textStatus, errorThrown) {
    if (!handled) {
        console.log("fail:", errorThrown)
    } else {
        console.log(handled);
    }
});

jsfiddle http://jsfiddle.net/o8gsdyaj/