我需要以固定的时间间隔一个接一个地执行多个函数,因此使用setTimeout。我想确保我理解它是如何执行的。我有以下逻辑:
setTimeout(function() {
//Execute first function
}, 200);
setTimeout(function() {
//Execute second function
}, 400);
setTimeout(function() {
//Execute third function
}, 600);
这是否意味着第一个函数在200ms后执行,第二个函数在第一个函数执行后200ms,第三个函数在第二个函数执行后200ms依次执行?或者我需要改变一些东西。
答案 0 :(得分:5)
这是否意味着第一个功能在200ms后执行,第二个功能在第一个200ms后执行,第二个功能在第二个200ms后执行,等等?
基本上,是的,它意味着什么。但请记住,the specification仅保证延迟参数是必须等待的最小时间,并且浏览器有时可以并且确实对这些调用进行限制 - 特别是如果选项卡未激活:
注意:此API不保证计时器将按计划完全触发。由于CPU负载,其他任务等原因导致延迟。
和
- (可选)等待另一个用户代理定义的时间长度。
醇>注意:这旨在允许用户代理根据需要填充超时,以优化设备的电源使用。例如,一些处理器具有低功耗模式,其中定时器的粒度减小;在这样的平台上,用户代理可以降低定时器的速度以适应此计划,而不是要求处理器使用更准确的模式及其相关的更高功耗。
此外,如果你的任何一个功能需要花费相当多的时间来运行,那么一个功能结束和下一个功能结束之间的延迟可能不是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