0

jquery 返回的承诺是否提供了在最后一个地方处理所有错误的规定。像这样的东西:

在此处输入图像描述

如果是这样,我会很感激一些代码,也许是 raw $.deferred.done.fail

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

4

2 回答 2

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);

});

尝试切换到无效的 url 以在错误回调中结束。

http://jsfiddle.net/VHjzM/

于 2013-06-05T11:21:20.183 回答
1

注意:答案假定 jQuery 1.8+。在 jQuery 1.8 之前,jQuery 的 promise/deferred 实现不是这样工作的。

.done()/.fail()和函数之间有一个细微的区别.then()——从 1.8 开始,.then()的主要用途是应用过滤器,而.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()as 也可以,因为它会返回一个新的 Promise,当任何给定的 Promise 被拒绝时,该 Promise 会被拒绝,并使用来自所有这些 Promise 的组合数据成功解决。

于 2013-06-05T11:41:36.250 回答