Ich verwende $.when
, um einige Deferred-Objekte zu verketten, und wenn einer von ihnen fehlschlägt, wird die -Methode direkt nach dem Fehler aufgerufen, auch wenn ich noch einen Deferrer habe in einem "ausstehenden" Zustand.jquery deferred - "immer" beim ersten Reject aufgerufen
var promises = [], defs = [];
for(var i=0 ; i < 10 ; i++){
defs.push($.Deferred());
promises.push(defs[i].promise());
}
var res = $.when.apply($, promises);
res.fail(function(){console.log('failed')});
res.done(function(){console.log('done')});
res.always(function(){console.log('always')});
res.then(function(){console.log('then, done')},
function(){console.log('then, failed')});
var j = 0;
var t = setInterval(function(){
if(j < 10){
if(j < 5) {
console.log('resolve');
defs[j++].resolve();
}
else {
console.log('reject');
defs[j++].reject();
}
}
else {
clearInterval(t);
}
}, 200);
Überprüfen Sie this jsfiddle.
Vielleicht ist es das normale Verhalten. Aber wie kann ich in diesem Fall das Ende meiner Kette erreichen, selbst wenn einige von ihnen versagt haben?
danke @ yury-tarabanko! Ich mag die Idee, jQuery zu erweitern und eine wiederverwendbare Methode hinzuzufügen, um alle Deferrer-Ends zu betrachten, selbst wenn sie fehlgeschlagen sind. Basierend auf Ihrer Idee und auf "wenn" jQuery Quelle, ich habe die "whenAll" wieder, überprüfen Sie die Quelle, wenn Sie Zeit haben http://jsfiddle.net/cSy2K/5/;) – zazabe