承诺的单一错误处理程序

时间:2013-06-05 11:17:37

标签: javascript jquery

jquery返回的promise是否提供了在最后处理单个位置的所有错误的规定。像这样:

enter image description here

如果是这样,我会很感激一些代码,可能是原始$.deferred.done.fail

尝试过的文档:http://api.jquery.com/deferred.fail/

2 个答案:

答案 0 :(得分:2)

var jqXHR1 = $.get('/echo/json/'),
    jqXHR2 = $.get('/echo/json/');

$.when(jqXHR1, jqXHR2).then(function(data1, data2){

    //success, do stuff with the data objects

}, function(jqXHR, textStatus, errorThrown) { 

    //error in at least one of the requets:
    console.log(jqXHR, textStatus, errorThrown);

});

尝试切换到无效的网址以结束错误回调。

http://jsfiddle.net/VHjzM/

答案 1 :(得分:1)

注意:答案假定为jQuery 1.8+。在jQuery 1.8之前,jQuery的promise / deferred实现没有这种方式。

.done() / .fail().then()函数之间存在细微差别 - 从1.8开始,.then()的主要用途是应用过滤器< / em>,而.done() / .fail()只是应用回调。区别在于.done().fail()返回相同的承诺(因此调用.done().done().done()只会为您的初始承诺添加更多回调),而.then()会返回值的新承诺从过滤器返回(因此.then(success)返回一个新的承诺,该承诺将使用成功返回的值解析。)

可以在此处找到这种差异的演示:http://jsfiddle.net/BGSacho/HsMSv/4/

因此,为了复制与该图像相同的功能,您需要:

Deferred.then(success_a)
        .then(success_b)
        .then(success_c, failure);

可悲的是,jQuery文档在这个主题上有点粗略,但你可以在http://api.jquery.com/deferred.then/看到它

在接受的答案中使用$.when()也会有效,因为它将返回一个新的承诺,当任何的给定承诺被拒绝时,它将被拒绝,并且成功解决了来自所有人的综合数据。