我$.when
用来链接一些 Deferred 对象,如果其中一个失败,该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);
检查这个 jsfiddle。
也许这是正常的行为。但是,在这种情况下,即使其中一些失败了,我怎么能抓住我的链条末端呢?