在我的下面的代码中,如果任何延迟失败,它将进入失败阻止,一切都将丢失。我想要的是,忽略失败者并抓住成功者。有任何优雅的方式吗?如果所有延迟失败,我将如何进入失败的阻止。 一个可以解决的问题是采用for循环并逐个处理该循环中的 deferredItems 数组,但这并不是一种优雅的方式。
$.when.apply($, deferredItems).done(function(){
}).fail(function(errorObj) {
});
答案 0 :(得分:1)
使用.always()
$.map([a, b], function(d) {
$.when(d).always(function(data) {
console.log(data)
})
})
答案 1 :(得分:1)
您可以使用.always,然后按照建议找到已解决的
$.when.apply($, deferredItems).always(function(){
var resolvedDeferreds = $.grep(deferredItems, function(deferred){
return deferred.state() === 'resolved';
});
//do stuff with resolved deferreds
})
编辑:
事实证明这不会起作用。一旦延迟失败并且不等待剩余的挂起延期,则立即调用.always
回调。看起来似乎没有办法等待一系列的deferred,所有得到解决或拒绝只使用jquery.when原样。