我如何一个接一个地执行功能?

时间:2013-03-25 01:14:07

标签: javascript jquery

也许我使用它错了,但我想链接3个函数,第二个函数在第一个函数完成时启动,第三个函数在第二个函数完成时启动。根据{{​​3}},我应该能够这样做:

$.when( first() ).then( second() ).then(third() );

他们似乎都在同一时间执行。是什么给了什么?

docs

我也试过了:

first().then( second() ).then(third() );

这会在第一个div中消失,但不会在第二个和第三个div中消失;

3 个答案:

答案 0 :(得分:3)

您迫使立即执行这些功能。 (顺便说一下,它们不是同时执行,而是一个接一个地执行,因为JavaScript是单线程的。)

您需要编写$.when(first).then(second).then(third)(首先是承诺),让库执行它们。不要自己执行(这是parens所做的)。

编辑:哦,没看到小提琴。是的,SeanJohnson所说的。

答案 1 :(得分:1)

只需first(); second(); third();即可。 JavaScript是单线程的。

使用whenthen用于集成Promise的内容,例如ajax请求(至少,这是我作为非jQuery用户的理解)

编辑:这是你的jsFiddle仅使用CSS重拍,顺便说一句^ _ ^

答案 2 :(得分:0)

如果你想在动画完成JS Fiddle之后完成每项功能,

使用:

var first = function(callBack1, callBack2){
    $("#div1").fadeIn(2000, function(){callBack1(callBack2)});
}
var second = function(callBack){
  $("#div2").fadeIn(2000, callBack);

}

var third = function(){
  $("#div3").fadeIn(2000);

}


first(second, third);