我很難用$ .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
這不是一個錯誤。 [The docs](http://api.jquery.com/jQuery.when/)指出,當第一次觀察到的諾言失敗時,when()失效。如果沒有'when()'_is_解析它返回的promise,所以它的'always()'會被觸發。不知道如何解決這個問題,但是你可能需要實現你自己的'when'-like構造。 – lanzz
好吧,那就是缺乏。我終於找到了一張相關的票:http://bugs.jquery.com/ticket/9386但他們不會實現一些東西,直到有人首先想出一個插件。 _sigh_ – BiAiB