我很难用$ .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