理解彼此跟随的setTimeout()函数的执行

时间:2015-09-18 14:01:15

标签: javascript settimeout execution

我需要以固定的时间间隔一个接一个地执行多个函数,因此使用setTimeout。我想确保我理解它是如何执行的。我有以下逻辑:

setTimeout(function() {
  //Execute first function
}, 200);

setTimeout(function() {
  //Execute second function
}, 400);

setTimeout(function() {
  //Execute third function
}, 600);

这是否意味着第一个函数在200ms后执行,第二个函数在第一个函数执行后200ms,第三个函数在第二个函数执行后200ms依次执行?或者我需要改变一些东西。

2 个答案:

答案 0 :(得分:5)

  

这是否意味着第一个功能在200ms后执行,第二个功能在第一个200ms后执行,第二个功能在第二个200ms后执行,等等?

基本上,是的,它意味着什么。但请记住,the specification仅保证延迟参数是必须等待的最小时间,并且浏览器有时可以并且确实对这些调用进行限制 - 特别是如果选项卡未激活:

  

注意:此API不保证计时器将按计划完全触发。由于CPU负载,其他任务等原因导致延迟。

  
      
  1. (可选)等待另一个用户代理定义的时间长度。
  2.         

    注意:这旨在允许用户代理根据需要填充超时,以优化设备的电源使用。例如,一些处理器具有低功耗模式,其中定时器的粒度减小;在这样的平台上,用户代理可以降低定时器的速度以适应此计划,而不是要求处理器使用更准确的模式及其相关的更高功耗。

此外,如果你的任何一个功能需要花费相当多的时间来运行,那么一个功能结束和下一个功能结束之间的延迟可能不是200毫秒 - 它可能会更少。

答案 1 :(得分:2)

按照James的回答,为了保证这个最小延迟,你应该在匿名回调中触发下一个setTimeout(),每个回调都指定了200ms的延迟:

setTimeout(function() {
    //Execute first function

    setTimeout(function() {
        //Execute second function

        setTimeout(function() {
            //Execute third function
        }, 200);

    }, 200);

}, 200);

这样你可以确定每个函数之间的延迟至少 200ms