当多个Deferred对象传递给jQuery.when时,该方法从一个新的"master"Deferred对象返回Promise,该对象跟踪它已经传递的所有Deferred的聚合状态.
该方法将
如果主Deferred被解析(即所有Deferreds解析),则传递给传递给jQuery.when的所有Deferred的已解析值.例如,当Deferreds是jQuery.ajax()请求时,参数将是请求的jqXHR对象,按照它们在参数列表中给出的顺序:
$.when( $.getJSON('foo'), $.getJSON('bar') ).done(function(foo, bar) {
// foo & bar are jqXHR objects for the requests
});
Run Code Online (Sandbox Code Playgroud)
在其中一个Deferreds被拒绝的多个Deferreds案例中,jQuery.when立即激活其主Deferred的失败回调,即使某些Deferreds在此时仍未解决:
$.when( $.getJSON('foo'), $.getJSON('bar') ).fail(function(req) {
// req is the jqXHR object for one of the failed requests
});
Run Code Online (Sandbox Code Playgroud)
当所有传递给jQuery的Deferreds都不再"未解决"时,我需要触发一个回调(即所有的"被解决"或"被拒绝").我可以使用200 OK代码发送JSON对象(而不是发送带有404 Not Found错误状态代码的JSON)并在done()方法中确定成功/错误,但我更喜欢保持我的API RESTful.我怎么能做到这一点?