【新人求教】javascript如何实现sleep延时效果

kzzhr 2013-08-07 12:25:35
现有以下代码:

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正常运行。或者有什么其它的解决办法?
...全文
383 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kzzhr 2013-08-07
  • 打赏
  • 举报
回复
我是在写一个类似于代码解释器一样的东西。会有很多个函数需要我依次执行,但是 functions[i] 里的 setTimeout(code1,time) 会使得 code1 晚于 functions[i+1] 执行。我希望等 functions[i] 里的 timeout 彻底执行完之后才去执行 functions[i+1].
kzzhr 2013-08-07
  • 打赏
  • 举报
回复
引用 1 楼 ftiger 的回复:
你不能将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和其它的函数。
ftiger 2013-08-07
  • 打赏
  • 举报
回复
你不能将javascript视为顺序执行的。 代码一的逻辑是    启动一个定时器,    执行foo3,    定时器到期执行foo1 所以你要执行完foo1再foo3,一个是将foo3放到foo1后面,要不就这样写
function foo1(){
   alert("1")
}

function foo3(){
    alert("3")
}

function foo2(){
   foo1();
   foo3();
}

 setTimeout(foo2,1000);
kzzhr 2013-08-07
  • 打赏
  • 举报
回复
引用 3 楼 kzzhr 的回复:
我是在写一个类似于代码解释器一样的东西。会有很多个函数需要我依次执行,但是 functions[i] 里的 setTimeout(code1,time) 会使得 code1 晚于 functions[i+1] 执行。我希望等 functions[i] 里的 timeout 彻底执行完之后才去执行 functions[i+1].
被无视了
hch126163 2013-08-07
  • 打赏
  • 举报
回复
function foo1(){ // code foo3(); } function foo2(){ setTimeout(foo1,1000); } function foo3(){ // code } foo2();
ftiger 2013-08-07
  • 打赏
  • 举报
回复
引用 2 楼 kzzhr 的回复:
我用的是一个函数数组,这里只是举个例子。 在实际的代码中我并不确定functions[i]里有没有调用timeout和其它的函数。
你真的是一定要保证foo3在foo1之后,直接点,foo3的调用加到foo1里去,别放进数组。 另一种思路是foo3自己保证没有错误才执行,那在foo3里就要加上判断, if(条件不成立){ setTimeout(arguments.cell,100); //arguments.callee 表示函数本身,这样就不用知道函数名了,特别是习惯使用匿名函数时特有用。 return; }

87,921

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧