jquery 返回的承诺是否提供了在最后一个地方处理所有错误的规定。像这样的东西:
如果是这样,我会很感激一些代码,也许是 raw $.deferred
,.done
和.fail
jquery 返回的承诺是否提供了在最后一个地方处理所有错误的规定。像这样的东西:
如果是这样,我会很感激一些代码,也许是 raw $.deferred
,.done
和.fail
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 以在错误回调中结束。
注意:答案假定 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 的组合数据成功解决。