Node.js – Timeout-ref() 和 Timeout-unref() 方法
node.jsserver side programmingprogramming
Timeout 对象在内部创建,并由 setTimeout() 和 setInterval() 方法返回。您可以使用此对象并将其传递给 clearTimeout() 或 clearInterval() 来取消已安排的操作。
以下是可用于控制默认行为的 timeout 类 ref 对象 −
1. timeout.ref()
如果 timeout 对象的事件循环不存在,则会调用此方法。此方法的实际使用仅在调用 timeout.unref() 后进行,并且需要再次引用 timeout 对象。
语法
timeout.ref()
2. timeout.unref()
此方法将告知 timeout 对象 Node.js 事件循环不再需要处于活动状态。如果没有其他活动或进程正在运行,则该进程可能会在调用 Timeout 对象的回调之前退出。
语法
timeout.unref()
示例
创建一个名为"timeout.js"的文件,并复制以下代码。创建文件后,使用命令"node timeout.js"运行此代码,如下例所示
// 超时类演示示例 // 使用 setTimeout() 方法设置超时 var Timeout = setTimeout(function fun() { console.log("1. Setting Timeout for 100ms", 100); }); // 检查 timeout.hasRef() 对象 console.log("2. ", Timeout.hasRef(); // 打印 Timeout 引用 console.log("3. ", Timeout.ref()); // 取消引用并重新引用 console.log("4. ", Timeout.unref()); // 检查引用是否已移除? console.log("5. ", Timeout.hasRef()); Timeout.ref() // 刷新计时器 console.log("6. ", Timeout.hasRef()); // 清除 setInterval 超时 clearTimeout(Timeout); console.log("7. Timeout is cleared !");
输出
它将产生以下输出 −
2. true 3. Timeout { _called: false, _idleTimeout: 1, _idlePrev: [TimersList], _idleNext: [TimersList], _idleStart: 358, _onTimeout: [Function: fun], _timerArgs: undefined, _repeat: null, _destroyed: false, [Symbol(unrefed)]: false, [Symbol(asyncId)]: 5, [Symbol(triggerId)]: 1 } 4. Timeout { _called: false, _idleTimeout: 1, _idlePrev: null, _idleNext: null, _idleStart: 358, _onTimeout: [Function: fun], _timerArgs: undefined, _repeat: null, _destroyed: false, _handle: [Timer], [Symbol(unrefed)]: false, [Symbol(asyncId)]: 5, [Symbol(triggerId)]: 1 } 5. false 6. true 7. Timeout is cleared !