现有以下代码:function foo1(){
// code
}
function foo2(){
setTimeout(foo1,1000);
}
function foo3(){
// code
}foo2();
foo3();这段代码的效果是,先到foo2里设定了计时器,然后跳出,执行foo3,同是当计时器到1s后执行foo1.
我想得到的效果是等foo2里的foo1执行完之后才去跳出执行foo3.尝试过的办法,把foo2改成function foo2(){
//setTimeout(foo1,1000);
foo1();
sleep(1000);
}其中sleep是用循环判时实现,造成的结果是卡机。(与此同时有在其它地方用timeout在做帧动画,会造成动画也卡住)。请问各位大神还有什么办法能实现延时效果,但不影响其它的timeout正常运行。或者有什么其它的解决办法?
JavaScript函数
// code
}
function foo2(){
setTimeout(foo1,1000);
}
function foo3(){
// code
}foo2();
foo3();这段代码的效果是,先到foo2里设定了计时器,然后跳出,执行foo3,同是当计时器到1s后执行foo1.
我想得到的效果是等foo2里的foo1执行完之后才去跳出执行foo3.尝试过的办法,把foo2改成function foo2(){
//setTimeout(foo1,1000);
foo1();
sleep(1000);
}其中sleep是用循环判时实现,造成的结果是卡机。(与此同时有在其它地方用timeout在做帧动画,会造成动画也卡住)。请问各位大神还有什么办法能实现延时效果,但不影响其它的timeout正常运行。或者有什么其它的解决办法?
JavaScript函数
代码一的逻辑是
启动一个定时器,
执行foo3,
定时器到期执行foo1
所以你要执行完foo1再foo3,一个是将foo3放到foo1后面,要不就这样写function foo1(){
alert("1")
}function foo3(){
alert("3")
}function foo2(){
foo1();
foo3();
} setTimeout(foo2,1000);
我用的是一个函数数组,这里只是举个例子。
在实际的代码中我并不确定functions[i]里有没有调用timeout和其它的函数。
你真的是一定要保证foo3在foo1之后,直接点,foo3的调用加到foo1里去,别放进数组。另一种思路是foo3自己保证没有错误才执行,那在foo3里就要加上判断,
if(条件不成立){
setTimeout(arguments.cell,100); //arguments.callee 表示函数本身,这样就不用知道函数名了,特别是习惯使用匿名函数时特有用。
return;
}
// code
foo3();
}
function foo2(){
setTimeout(foo1,1000);
}
function foo3(){
// code
}
foo2();