Shu*_*Pal 3 javascript browser settimeout setinterval node.js
let cnt=0;
let i = setInterval(() => {
console.log(cnt++);
},200)
setTimeout(() => {
clearInterval(i);
},2000);Run Code Online (Sandbox Code Playgroud)
当在浏览器中执行时,此代码会记录:-
0 1 2 3 4 5 6 7 8 9
但是当使用 Node 执行时,它会记录:-
0 1 2 3 4 5 6 7 8
这是什么原因呢?
这是因为 Chrome会自我纠正setInterval. 节点(和其他浏览器)没有。请注意,当前规范与节点一致,即使有关于遵循 Chrome 行为的积极讨论。
所以在 Chrome 中,就像你有一个精确的
at beginTime + 200
do fn
at beginTime + 400
do fn
at beginTime + 600
do fn
...etc
Run Code Online (Sandbox Code Playgroud)
而在其他方面则将是
at beginTime + 200
do fn
at now + 200
do fn
...etc.
Run Code Online (Sandbox Code Playgroud)
但我们知道总会有一些延迟阻止计时器准确地按计划触发,因此在没有漂移校正的环境中,我们最终会得到比now预期时间晚的时间。
因此,在 Chrome 中,该setInterval作业将在队列中排在该作业之前setTimeout,而在其他环境中,由于漂移,即使是无限小,它也会排在后面。
| 归档时间: |
|
| 查看次数: |
201 次 |
| 最近记录: |