node.js中的定时器是一种会在一段时间后调用给定的函数的内部构造。何时调用定时器函数取决于用来创建定时器的方法,以及node.js时间循环正在执行的其他工作。
setImmediate
node.js定义了
setImmediate(callback[, ...args])
方法,用于设定定时器为立即执行定时器。其中参数:callback<function>
指在当前回合的Node.js事件循环结束时调用的函数;...args<any>
指当调用callback
时传入的可选参数。
当多次调用setImmediate()
时,callback函数将按照创建它们的顺序排队等待执行。每次事件循环迭代都会处理整个回调队列。如果立即(immediate)定时器是从正在执行的回调排入队列,则直到下一次事件循环迭代才会触发。
如果callback不是函数,则抛出typeError
此方法具有使用util.promisify()
的用于Promise的自定义变体。
const util = require("util") const setImmediatePromise = util.promisify(setImmediate) setImmediatePromise("foobar").then((valur) => { // value === "foobar"(传值是可选的) // 在所有I/O回调之后执行 }) // 或使用异步功能 async function timerExample() { console.log("在I/o回调之前") await setImmediatePromise() console.log("在I/O回调之后") } timerExample() 复制代码
setInterval
setInterval(callback, delay[, ...args])
方法,用于设定定时器执行的周期,定时器每隔delay毫秒重复执行一次。其中参数: callback<function>
指在当前回合的Node.js事件循环结束时调用的函数;delay<number>
指调用callback之前等待的毫秒数;...args<any>
指当前调用callback时传入的可选参数。
- 如果当delay大于2 147 483 647(即32位整型的最大值)或小于1时,delay将设置位1
- 如果callback不是函数,则抛出typeError异常。