node - 定时调度 (上篇)

1,615 阅读2分钟

这是我参与8月更文挑战的第28天,活动详情查看:8月更文挑战

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异常。

最后

公众号:小何成长,佛系更文,都是自己曾经踩过的坑或者是学到的东西

有兴趣的小伙伴欢迎关注我哦,我是:何小玍。大家一起进步鸭