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