終了したDeferredを$.when()と同期するのに問題があります。解決または失敗したかどうかにかかわらず、すべての延期が終了したときに通知を受け取りたいです。
私の問題は、最初に起動するwhen()。always()が失敗し、他の遅延が完了するのを待たないことです。バグかどうかわからない。
例を作成しました。これがJsFiddleです:http: //jsfiddle.net/m3REv/
それからのjsコード:
/* our multiple deferred we'd like to sync. */
var def1 = $.Deferred();
var def2 = $.Deferred();
var def3 = $.Deferred();
def1.done( function() { logger.log('1 done');} ).fail( function() {logger.log('1 fail');} );
def2.done( function() { logger.log('2 done');} ).fail( function() {logger.log('2 fail');} );
def3.done( function() { logger.log('3 done');} ).fail( function() {logger.log('3 fail');} );
$.when( def1, def2, def3 ).then( function() {
logger.log('w then');
} ).done( function() {
logger.log('w done');
} ).fail( function() {
logger.log('w fail');
} ).always( function() {
logger.log('w always');
});
def1.reject();
def2.resolve();
def3.resolve();
出力は次のとおりです。
1 fail
w fail
w always
2 done
3 done