【发布时间】:2017-03-16 00:52:08
【问题描述】:
小提琴:https://jsfiddle.net/x89ja8r8/
我一直在寻找一种快速链接函数异步的方法。 Stackoverflow 提供了很多“相同”的解决方案,但当我尝试时,总是有问题。
在下面的示例中,我有 3 个函数。我尝试使用 $.Deffer() 异步链接它们。
预期:div 将在 5500 毫秒内更改其尺寸,然后 div 将在 2000 毫秒内淡入 0.25 不透明度,然后 div innerHTML 将更改为 DONE!
结果:div 在 5500 毫秒内改变其 innerHTML(来自 fn3())同时 改变其尺寸(来自 fn1()),然后它在 2000 毫秒的持续时间内褪色到 0.25 的不透明度(来自 fn2())。
function fn1() {
$("#result").animate({
width: 800,
height: 800
}, 5500);
}
function fn2() {
$("#result").animate({
opacity: 0.25
}, 2000);
}
function fn3() {
$("#result").html("DONE!");
}
var dfr = $.Deferred();
dfr.done(fn1, fn2, fn3).resolve();
这里有什么问题?如果它根本不起作用,则 fn1() 和 fn2() 之间不应该存在异步。结果清楚地表明 fn2() 确实等待 fn1() 完成,但 fn3() 甚至没有等待就开始了。
【问题讨论】:
-
按顺序运行的 2 个函数正在这样做,因为
.animate()具有特殊行为,即在开始之前等待该元素上的所有其他动画完成。
标签: javascript jquery asynchronous promise jquery-deferred