在我的代碼中,如果任何延遲失敗,它會進入失敗塊並且一切都會丟失。我想要的是,忽略失敗的成功者。任何優雅的方式來做到這一點?如果所有推遲失敗,我將如何去失敗的塊。 一個解決方法可能是採取一個for循環,並逐個處理deferredItems數組,但這並不是優雅的方式。在處理延遲數組的同時獲得成功的延遲並忽略失敗的代碼
$.when.apply($, deferredItems).done(function(){
}).fail(function(errorObj) {
});
在我的代碼中,如果任何延遲失敗,它會進入失敗塊並且一切都會丟失。我想要的是,忽略失敗的成功者。任何優雅的方式來做到這一點?如果所有推遲失敗,我將如何去失敗的塊。 一個解決方法可能是採取一個for循環,並逐個處理deferredItems數組,但這並不是優雅的方式。在處理延遲數組的同時獲得成功的延遲並忽略失敗的代碼
$.when.apply($, deferredItems).done(function(){
}).fail(function(errorObj) {
});
可以使用。總是,然後找到其被解決的,如你所說
$.when.apply($, deferredItems).always(function(){
var resolvedDeferreds = $.grep(deferredItems, function(deferred){
return deferred.state() === 'resolved';
});
//do stuff with resolved deferreds
})
編輯:
原來這是行不通的。一旦延遲失敗並且不等待剩餘的待決延期,立即調用.always
回調。看起來像沒有辦法等待一系列的被攻擊者全部得到解決或僅僅使用jquery.when原樣被拒絕。
如果所有推遲失敗,我需要去失敗塊,有無論如何,我可以切換到失敗塊,如果我沒有得到任何解決。? – Ahmad
使用.always()
$.map([a, b], function(d) {
$.when(d).always(function(data) {
console.log(data)
})
})
jsfiddle https://jsfiddle.net/2y49xo17/,https://jsfiddle.net/2y49xo17/1/ – guest271314
,如果所有推遲失敗,我需要去失敗塊,有無論如何,我可以切換到失敗塊,如果我沒有得到任何解決。 – Ahmad
@Ahmad在'.always()中嘗試使用'if..else' https://jsfiddle.net/2y49xo17/2/ – guest271314
沒有什麼內置到jQuery中,如果一個延遲失敗,'$ .when'也如此,這就是它的設計方式 – adeneo