अस्वीकार करते हैं, और अगर उनमें से एक असफल, always
विधि की विफलता के बाद सीधे बुलाया जाएगा, भले ही मैं अभी भी कुछ deferrer है एक "लंबित" राज्य में।
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);
चेक this jsfiddle।
शायद यह सामान्य व्यवहार है। लेकिन, इस मामले में, मैं अपनी श्रृंखला के अंत को कैसे पकड़ सकता हूं भले ही उनमें से कुछ विफल हो जाएं?
धन्यवाद @ यूरी-tarabanko! मुझे jQuery का विस्तार करने और सभी डिफेंडर अंत को देखने के लिए एक पुन: प्रयोज्य विधि जोड़ने का विचार पसंद है, भले ही वे विफल हो जाएं। आपके विचार के आधार पर और "कब" jQuery स्रोत पर, मैंने "कब" फिर से किया, यदि आपके पास समय है http://jsfiddle.net/cSy2K/5/;) – zazabe