jquery返回的承诺是否提供了在最后一个地方处理所有错误的规定。事情是这样的:承诺的单个错误处理程序
如果是这样我将不胜感激一些代码,也许生$.deferred
,.done
和.fail
尝试文档:http://api.jquery.com/deferred.fail/
jquery返回的承诺是否提供了在最后一个地方处理所有错误的规定。事情是这样的:承诺的单个错误处理程序
如果是这样我将不胜感激一些代码,也许生$.deferred
,.done
和.fail
尝试文档:http://api.jquery.com/deferred.fail/
注:回答假设的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()
作为公认的答案也将工作,因为它会返回其拒绝新的承诺时任何被拒绝,并成功解决所有这些承诺的数据。
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);
});
尝试切换到一个无效的网址最终在错误回调中结束。
同意答案,只是一个小问题 - jQuery的'.when()'与那个伪javascript中的'when()'不一样 - 伪javascript具有明确的执行顺序(第一个my_promise,然后是success_a,然后是success_b ...)。 – Sacho
+1给我介绍时http://api.jquery.com/jQuery.when/但它进入内部,而我更喜欢是否有像(或可能是它的默认行为?)语法''xhr1.done( xhr2).fail(/ * *当xhr失败时调用* /' – basarat
您也可以使用这些.' .done'和'.fail'只是'.then(成功,失败)的快捷方式' – Sacho
如果您链接了电话,您可以在末尾附加一个处理程序,以捕获链中任何地方的拒绝。 – mzedeler