【发布时间】:2016-01-21 08:29:31
【问题描述】:
我正在尝试找出一种方法来等待多个延迟对象并在完成后处理它们,可能就像为延迟对象开始下一组。
我被卡住了,因为以下结果不是预期的。 我期待结果为
allDone resovled values are 1,2,3
实际结果是
allDone resovled values are 1,2
var dfd1 = new $.Deferred();
var dfd2 = new $.Deferred();
var dfd3 = new $.Deferred();
var dfds = [ dfd1, dfd2, dfd3 ];
var resolvedValues = [];
$.when.apply($, dfds).done(function() {
dfds.forEach(function(dfd){
console.log("inloop");
dfd.promise().done(function(value) {
resolvedValues.push(value);
});
});
console.log("allDone resovled values are" + resolvedValues);
})
dfd1.resolve(1);
dfd2.resolve(2);
dfd3.resolve(3);
【问题讨论】:
-
请花点时间正确格式化您的代码,之前它是不可读的。拥有清晰易读的示例意味着您更有可能获得快速准确的答案。
-
没问题。我已经为你编辑了布局。
-
@T.J.Crowder 确实,奇怪的结果:jsfiddle.net/d4nxmdLx/1 ?!事实上并不奇怪,因为我们最后解析了 dfd3,所以我的例子不相关
-
@A.Wolff:我知道为什么了。又是 jQuery 损坏的同步/异步的东西。
-
@user3397062:一旦有答案,就不能明显改变问题;我已经回滚了那个编辑。如果在尝试将此答案应用于您的 ajax 情况后仍然遇到问题,请发布一个新问题,询问您在应用此问题时遇到的具体问题。
标签: jquery