Node.js 超时定时器类
计时器模块用于调度将在未来某个时间段调用的函数。它是一个全局 API,因此无需导入 (require(“timers”)) 即可使用。
Timeout 类有一个对象( setTimeout()/setInterval() ),它是在内部为计划的操作创建的,并且可以传递( clearTimeout()/clearInterval() )以取消那些计划的操作。当调度超时时,默认情况下,Node.js 的事件循环将继续运行,直到调用clearTimeout() 。 setTimeout()方法返回用于控制此默认行为的超时对象,导出timeout.ref()和timeout.unref()函数。
四个超时类对象定义如下:
1. timeout.hasRef():(在v11.0.0中添加)这个超时对象保持事件循环处于活动状态,直到返回的'True'如果返回'false'打破了事件循环。
句法:
timeout.hasRef()
返回值< boolean > :如果返回“True”,则此超时对象保持事件循环处于活动状态。
2. timeout.ref():(在 v9.7.0 中添加)当 Timeout 处于活动状态并且( timeout.ref() )被调用时,它请求 Node.js 事件循环没有退出这么长时间。无论如何,多次调用此方法没有任何效果。
句法:
timeout.ref()
返回值< Timeout >:返回一个超时引用。
3. timeout.refresh() ( v10.2.0 新增) :该方法在不分配新的 JavaScript 对象的情况下刷新计时器。定时器的开始时间设置为当前时间,通过调用其回调将定时器从之前指定的持续时间重新调度到当前时间。通过在已经调用其回调的计时器上使用 timeout.refresh() 然后重新激活计时器。
句法:
timeout.refresh()
返回值< Timeout > :返回超时参考。
4. timeout.unref() (在v9.7.0 中添加)当Timeout 处于活动状态时,它不需要Node.js 事件循环保持活动状态。如果任何其他活动保持事件循环运行,则在进程退出后调用 Timeout 对象的回调。无论如何,多次调用此方法也没有任何效果。
句法:
超时.unref()
返回值< Timeout > :返回超时参考。
示例:文件名:index.js
Javascript
// Node.js program to demonstrate the
// Timeout Class methods
// Setting Timeout by setTimeout Method
var Timeout = setTimeout(function alfa() {
console.log("0.> Setting Timeout", 12);
});
// Printing Timeout.hasRef method
console.log("1 =>", Timeout.hasRef());
// returns true
// Printing Timeout.ref before unref
console.log("2 =>", Timeout.ref());
Timeout.unref()
Timeout.ref()
// Returns timer reference
// Printing Timeout.refresh before unref
console.log("3 =>", Timeout.refresh());
// Returns timer reference
// Printing Timeout.unref method
console.log("4 =>", Timeout.unref());
// Returns Timeout reference and sets
// hasRef to false
// Printing Timeout.hasRef before unref
console.log("5 =>", Timeout.hasRef());
// Returns false
// Clears setInterval Timeout
clearTimeout(Timeout);
// Prints after clearing Timeout
console.log("6 => Printing after clearing Timeout");
使用以下命令运行index.js文件:
node index.js
输出:
1 => true
2 => Timeout {
_idleTimeout: 1,
_idlePrev: [TimersList],
_idleNext: [TimersList],
_idleStart: 52,
_onTimeout: [Function: alfa],
_timerArgs: undefined,
_repeat: null,
_destroyed: false,
[Symbol(refed)]: true,
[Symbol(asyncId)]: 2,
[Symbol(triggerId)]: 1
}
3 => Timeout {
_idleTimeout: 1,
_idlePrev: [TimersList],
_idleNext: [TimersList],
_idleStart: 87,
_onTimeout: [Function: alfa],
_timerArgs: undefined,
_repeat: null,
_destroyed: false,
[Symbol(refed)]: true,
[Symbol(asyncId)]: 2,
[Symbol(triggerId)]: 1
}
4 => Timeout {
_idleTimeout: 1,
_idlePrev: [TimersList],
_idleNext: [TimersList],
_idleStart: 87,
_onTimeout: [Function: alfa],
_timerArgs: undefined,
_repeat: null,
_destroyed: false,
[Symbol(refed)]: false,
[Symbol(asyncId)]: 2,
[Symbol(triggerId)]: 1
}
5 => false
6 => Printing after clearing Timeout
参考: https://nodejs.org/api/timers.html#timers_class_timeout