Node.js v25.0.0 文件
- Node.js v25.0.0
- 目錄
-
索引
- 斷言測試
- 非同步上下文跟蹤
- 非同步鉤子
- 緩衝區
- C++ 外掛
- 使用 Node-API 的 C/C++ 外掛
- C++ 嵌入器 API
- 子程序
- 叢集
- 命令列選項
- 控制檯
- 加密
- 偵錯程式
- 已棄用的 API
- 診斷通道
- DNS
- 域
- 環境變數
- 錯誤
- 事件
- 檔案系統
- 全域性物件
- HTTP
- HTTP/2
- HTTPS
- 檢查器
- 國際化
- 模組:CommonJS 模組
- 模組:ECMAScript 模組
- 模組:
node:moduleAPI - 模組:包
- 模組:TypeScript
- 網路
- 作業系統
- 路徑
- 效能鉤子
- 許可權
- 程序
- Punycode
- 查詢字串
- 逐行讀取
- REPL
- 報告
- 單一可執行檔案應用
- SQLite
- 流
- 字串解碼器
- 測試執行器
- 定時器
- TLS/SSL
- 跟蹤事件
- TTY
- UDP/資料報
- URL
- 實用工具
- V8
- 虛擬機器
- WASI
- Web Crypto API
- Web Streams API
- 工作執行緒
- Zlib
- 其他版本
- 選項
定時器#
原始碼: lib/timers.js
timer 模組暴露了一個全域性 API,用於排程函式在未來的某個時間段內被呼叫。因為定時器函式是全域性的,所以使用該 API 無需呼叫 require('node:timers')。
Node.js 中的定時器函式實現了與 Web 瀏覽器提供的定時器 API 類似的 API,但使用了不同的內部實現,該實現是圍繞 Node.js 事件迴圈構建的。
類: Immediate#
該物件在內部建立,並由 setImmediate() 返回。它可以被傳遞給 clearImmediate() 以取消已排程的操作。
預設情況下,當一個 immediate 被排程時,只要該 immediate 處於活動狀態,Node.js 事件迴圈就會繼續執行。setImmediate() 返回的 Immediate 物件匯出了 immediate.ref() 和 immediate.unref() 函式,可用於控制此預設行為。
immediate.ref()#
- 返回: <Immediate> 對
immediate的引用
當被呼叫時,只要 Immediate 處於活動狀態,就請求 Node.js 事件迴圈不要退出。多次呼叫 immediate.ref() 不會有任何效果。
預設情況下,所有 Immediate 物件都是“被引用”的 (ref'ed),因此通常不需要呼叫 immediate.ref(),除非之前呼叫過 immediate.unref()。
immediate.unref()#
- 返回: <Immediate> 對
immediate的引用
當被呼叫時,活動的 Immediate 物件將不再要求 Node.js 事件迴圈保持活動狀態。如果沒有其他活動使事件迴圈保持執行,程序可能會在 Immediate 物件的回撥函式被呼叫之前退出。多次呼叫 immediate.unref() 不會有任何效果。
immediate[Symbol.dispose]()#
取消 immediate。這類似於呼叫 clearImmediate()。
類: Timeout#
該物件在內部建立,並由 setTimeout() 和 setInterval() 返回。它可以被傳遞給 clearTimeout() 或 clearInterval() 以取消已排程的操作。
預設情況下,當使用 setTimeout() 或 setInterval() 排程定時器時,只要定時器處於活動狀態,Node.js 事件迴圈就會繼續執行。這些函式返回的每個 Timeout 物件都匯出了 timeout.ref() 和 timeout.unref() 函式,可用於控制此預設行為。
timeout.ref()#
- 返回: <Timeout> 對
timeout的引用
當被呼叫時,只要 Timeout 處於活動狀態,就請求 Node.js 事件迴圈不要退出。多次呼叫 timeout.ref() 不會有任何效果。
預設情況下,所有 Timeout 物件都是“被引用”的 (ref'ed),因此通常不需要呼叫 timeout.ref(),除非之前呼叫過 timeout.unref()。
timeout.refresh()#
- 返回: <Timeout> 對
timeout的引用
將定時器的開始時間設定為當前時間,並重新排程定時器,使其在先前指定的、根據當前時間調整後的持續時間後呼叫其回撥。這對於重新整理定時器而無需分配新的 JavaScript 物件很有用。
在已呼叫其回撥的定時器上使用此方法將重新啟用該定時器。
timeout.unref()#
- 返回: <Timeout> 對
timeout的引用
當被呼叫時,活動的 Timeout 物件將不再要求 Node.js 事件迴圈保持活動狀態。如果沒有其他活動使事件迴圈保持執行,程序可能會在 Timeout 物件的回撥函式被呼叫之前退出。多次呼叫 timeout.unref() 不會有任何效果。
timeout[Symbol.toPrimitive]()#
- 返回: <integer> 一個可用於引用此
timeout的數字
將 Timeout 強制轉換為原始值。該原始值可用於清除 Timeout。該原始值只能在建立超時的同一執行緒中使用。因此,要在 worker_threads 之間使用它,必須首先將其傳遞到正確的執行緒。這增強了與瀏覽器 setTimeout() 和 setInterval() 實現的相容性。
timeout[Symbol.dispose]()#
取消超時。
排程定時器#
Node.js 中的定時器是一個內部結構,它在一定時間後呼叫給定的函式。定時器函式的呼叫時機取決於建立定時器所使用的方法以及 Node.js 事件迴圈正在執行的其他工作。
setImmediate(callback[, ...args])#
callback<Function> 在 Node.js 事件迴圈的本次輪詢結束時要呼叫的函式...args<any> 呼叫callback時要傳遞的可選引數。- 返回: <Immediate> 用於
clearImmediate()
在 I/O 事件的回撥之後排程 callback 的“立即”執行。
當多次呼叫 setImmediate() 時,callback 函式會按照它們被建立的順序排隊等待執行。整個回撥佇列在每次事件迴圈迭代中都會被處理。如果在一個正在執行的回撥函式內部排隊了一個 immediate 定時器,該定時器直到下一次事件迴圈迭代時才會被觸發。
如果 callback 不是一個函式,將會丟擲 TypeError。
此方法有一個針對 promises 的自定義變體,可透過 timersPromises.setImmediate() 使用。
setInterval(callback[, delay[, ...args]])#
callback<Function> 定時器到期時要呼叫的函式。delay<number> 呼叫callback之前要等待的毫秒數。預設值:1。...args<any> 呼叫callback時要傳遞的可選引數。- 返回: <Timeout> 用於
clearInterval()
排程每隔 delay 毫秒重複執行 callback。
當 delay 大於 2147483647 或小於 1 或為 NaN 時,delay 將被設定為 1。非整數的延遲將被截斷為整數。
如果 callback 不是一個函式,將會丟擲 TypeError。
此方法有一個針對 promises 的自定義變體,可透過 timersPromises.setInterval() 使用。
setTimeout(callback[, delay[, ...args]])#
callback<Function> 定時器到期時要呼叫的函式。delay<number> 呼叫callback之前要等待的毫秒數。預設值:1。...args<any> 呼叫callback時要傳遞的可選引數。- 返回: <Timeout> 用於
clearTimeout()
在 delay 毫秒後排程一次性 callback 的執行。
callback 很可能不會在精確的 delay 毫秒後被呼叫。Node.js 不對回撥觸發的確切時間或其順序做任何保證。回撥將在儘可能接近指定時間時被呼叫。
當 delay 大於 2147483647 或小於 1 或為 NaN 時,delay 將被設定為 1。非整數的延遲將被截斷為整數。
如果 callback 不是一個函式,將會丟擲 TypeError。
此方法有一個針對 promises 的自定義變體,可透過 timersPromises.setTimeout() 使用。
取消定時器#
setImmediate()、setInterval() 和 setTimeout() 方法各自返回代表已排程定時器的物件。這些物件可以用來取消定時器並阻止其觸發。
對於 setImmediate() 和 setTimeout() 的 promisified 變體,可以使用 AbortController 來取消定時器。當取消時,返回的 Promises 將以 'AbortError' 被拒絕。
對於 setImmediate()
import { setImmediate as setImmediatePromise } from 'node:timers/promises';
const ac = new AbortController();
const signal = ac.signal;
// We do not `await` the promise so `ac.abort()` is called concurrently.
setImmediatePromise('foobar', { signal })
.then(console.log)
.catch((err) => {
if (err.name === 'AbortError')
console.error('The immediate was aborted');
});
ac.abort();const { setImmediate: setImmediatePromise } = require('node:timers/promises');
const ac = new AbortController();
const signal = ac.signal;
setImmediatePromise('foobar', { signal })
.then(console.log)
.catch((err) => {
if (err.name === 'AbortError')
console.error('The immediate was aborted');
});
ac.abort();
對於 setTimeout()
import { setTimeout as setTimeoutPromise } from 'node:timers/promises';
const ac = new AbortController();
const signal = ac.signal;
// We do not `await` the promise so `ac.abort()` is called concurrently.
setTimeoutPromise(1000, 'foobar', { signal })
.then(console.log)
.catch((err) => {
if (err.name === 'AbortError')
console.error('The timeout was aborted');
});
ac.abort();const { setTimeout: setTimeoutPromise } = require('node:timers/promises');
const ac = new AbortController();
const signal = ac.signal;
setTimeoutPromise(1000, 'foobar', { signal })
.then(console.log)
.catch((err) => {
if (err.name === 'AbortError')
console.error('The timeout was aborted');
});
ac.abort();
clearImmediate(immediate)#
immediate<Immediate> 一個由setImmediate()返回的Immediate物件。
取消由 setImmediate() 建立的 Immediate 物件。
clearInterval(timeout)#
timeout<Timeout> | <string> | <number> 一個由setInterval()返回的Timeout物件,或者是該Timeout物件的原始值(字串或數字)。
取消由 setInterval() 建立的 Timeout 物件。
clearTimeout(timeout)#
timeout<Timeout> | <string> | <number> 一個由setTimeout()返回的Timeout物件,或者是該Timeout物件的原始值(字串或數字)。
取消由 setTimeout() 建立的 Timeout 物件。
定時器 Promises API#
timers/promises API 提供了一組替代的定時器函式,它們返回 Promise 物件。該 API 可透過 require('node:timers/promises') 訪問。
import {
setTimeout,
setImmediate,
setInterval,
} from 'node:timers/promises';const {
setTimeout,
setImmediate,
setInterval,
} = require('node:timers/promises');
timersPromises.setTimeout([delay[, value[, options]]])#
delay<number> 在兌現 promise 之前等待的毫秒數。預設值:1。value<any> promise 被兌現時使用的值。options<Object>ref<boolean> 設定為false表示已排程的Timeout不應要求 Node.js 事件迴圈保持活動狀態。預設值:true。signal<AbortSignal> 一個可選的AbortSignal,可用於取消已排程的Timeout。
import {
setTimeout,
} from 'node:timers/promises';
const res = await setTimeout(100, 'result');
console.log(res); // Prints 'result'const {
setTimeout,
} = require('node:timers/promises');
setTimeout(100, 'result').then((res) => {
console.log(res); // Prints 'result'
});
timersPromises.setImmediate([value[, options]])#
value<any> promise 被兌現時使用的值。options<Object>ref<boolean> 設定為false表示已排程的Immediate不應要求 Node.js 事件迴圈保持活動狀態。預設值:true。signal<AbortSignal> 一個可選的AbortSignal,可用於取消已排程的Immediate。
import {
setImmediate,
} from 'node:timers/promises';
const res = await setImmediate('result');
console.log(res); // Prints 'result'const {
setImmediate,
} = require('node:timers/promises');
setImmediate('result').then((res) => {
console.log(res); // Prints 'result'
});
timersPromises.setInterval([delay[, value[, options]]])#
返回一個非同步迭代器,該迭代器以 delay 毫秒的間隔生成值。如果 ref 是 true,你需要顯式或隱式地呼叫非同步迭代器的 next() 來保持事件迴圈的活動狀態。
delay<number> 兩次迭代之間等待的毫秒數。預設值:1。value<any> 迭代器返回的值。options<Object>ref<boolean> 設定為false表示兩次迭代之間已排程的Timeout不應要求 Node.js 事件迴圈保持活動狀態。預設值:true。signal<AbortSignal> 一個可選的AbortSignal,可用於取消操作之間已排程的Timeout。
import {
setInterval,
} from 'node:timers/promises';
const interval = 100;
for await (const startTime of setInterval(interval, Date.now())) {
const now = Date.now();
console.log(now);
if ((now - startTime) > 1000)
break;
}
console.log(Date.now());const {
setInterval,
} = require('node:timers/promises');
const interval = 100;
(async function() {
for await (const startTime of setInterval(interval, Date.now())) {
const now = Date.now();
console.log(now);
if ((now - startTime) > 1000)
break;
}
console.log(Date.now());
})();
timersPromises.scheduler.wait(delay[, options])#
delay<number> 在解析 promise 之前等待的毫秒數。options<Object>ref<boolean> 設定為false表示已排程的Timeout不應要求 Node.js 事件迴圈保持活動狀態。預設值:true。signal<AbortSignal> 一個可選的AbortSignal,可用於取消等待。
- 返回:<Promise>
一個由 排程 API 草案規範定義的實驗性 API,該規範正在作為標準的 Web 平臺 API 進行開發。
呼叫 timersPromises.scheduler.wait(delay, options) 等同於呼叫 timersPromises.setTimeout(delay, undefined, options)。
import { scheduler } from 'node:timers/promises';
await scheduler.wait(1000); // Wait one second before continuing