jquery返回的promise是否提供了在最后处理单个位置的所有错误的规定。像这样:
如果是这样,我会很感激一些代码,可能是原始$.deferred
,.done
和.fail
答案 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);
});
尝试切换到无效的网址以结束错误回调。
答案 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()
也会有效,因为它将返回一个新的承诺,当任何的给定承诺被拒绝时,它将被拒绝,并且成功解决了来自所有人的综合数据。