js里面有这样几种相关的方法:
- setTimeout
- process.nextTick
- setImmediate
- setInterval
nextTick
js里面的Tick可以理解为事件循环执行了一次,nextTick就是将回调放到下一次事件循环中。
setTimeout
setTimeout可以设置多少毫秒后调用回调函数,不过并不精确。可能会因为事件循环运行时间较长导致超时。
setTimeout会返回id,对应取消延时的方法clearTimeout(id)。
setImmediate
和process.nextTick方法类似。
可以看到优先级的对比:
setImmediate(()=>{
console.log('setImmediate');
});
setTimeout(()=>{
console.log('setTimeout');}, 0);
process.nextTick(()=>{
console.log('nextTick');
});
输出结果
nextTick
setTimeout
setImmediate
setInterval
最后的setInterval是每隔一段时间就执行回调函数,相对应的函数是clearInterval。需要先经过一次间隔后才会运行,并不是立即加载。
setInterval不管上一次回调是否完成,都会在相同的间隔内执行下一次回调,真正的间隔取决于设置间隔和回调函数运行的时间。

如果想要避免这种情况,保证上一次结束与下一次开始的间隔相同的话,需要循环调用setTimeout方法。
const myFunction = () => {
// do something
setTimeout(myFunction, 1000)
}
setTimeout(myFunction, 1000)
同样可以使用clearInterval(id)来结束。
参考链接:
Timers
setImmediate
nextTick
本文深入解析JavaScript中的事件循环机制,包括setTimeout、setImmediate、process.nextTick及setInterval等定时器函数的工作原理和优先级对比。通过代码示例展示不同定时器的执行顺序,解释setTimeout的不精确性及其原因,探讨setImmediate与process.nextTick的区别,以及如何正确使用setInterval和setTimeout实现准确的定时任务。
720

被折叠的 条评论
为什么被折叠?



