小提琴:https://jsfiddle.net/x89ja8r8/递延()只能使2个功能异步
我一直在寻找周围找到一个快速的方法来链功能异步。 Stackoverflow提供了很多“相同”的解决方案,但是当我尝试它时,总会有一些错误。
在下面的例子中,我有3个函数。我尝试使用$ .Deffer()异步链接它们。
期望:股利将动画改变其尺寸为5500ms的持续时间,然后股利会褪色至0.25透明度在2000毫秒的时间,然后在div的innerHTML将变为DONE!
结果:在div改变其的innerHTML(从FN3())同时其改变其尺寸(从FN1())为5500ms的持续时间,然后它消失至0.25不透明度在持续时间2000ms(来自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()只是在没有等待的情况下开始执行。
这两个按顺序运行的函数是这样做的,因为'.animate()'具有等待所有其他动画在开始之前完成的特殊行为。 – 4castle