Timer
[Stabile: 2 - Stabile]
Stabile: 2 Stabilità: 2 - Stabile
Codice sorgente: lib/timers.js
Il modulo timer espone un'API globale per la pianificazione di funzioni da chiamare in un momento futuro. Poiché le funzioni del timer sono globali, non è necessario chiamare require('node:timers') per utilizzare l'API.
Le funzioni del timer all'interno di Node.js implementano un'API simile all'API dei timer fornita dai browser Web, ma utilizzano un'implementazione interna diversa che è costruita attorno al Ciclo di eventi di Node.js.
Classe: Immediate
Questo oggetto viene creato internamente e viene restituito da setImmediate(). Può essere passato a clearImmediate() per annullare le azioni pianificate.
Per impostazione predefinita, quando viene pianificato un immediate, il ciclo di eventi di Node.js continuerà a essere eseguito finché l'immediate è attivo. L'oggetto Immediate restituito da setImmediate() esporta entrambe le funzioni immediate.ref() e immediate.unref() che possono essere utilizzate per controllare questo comportamento predefinito.
immediate.hasRef()
Aggiunto in: v11.0.0
- Restituisce: <boolean>
Se true, l'oggetto Immediate manterrà attivo il ciclo di eventi di Node.js.
immediate.ref()
Aggiunto in: v9.7.0
- Restituisce: <Immediate> un riferimento a
immediate
Quando viene chiamata, richiede che il ciclo di eventi di Node.js non si chiuda fintanto che l'Immediate è attivo. Chiamare immediate.ref() più volte non avrà alcun effetto.
Per impostazione predefinita, tutti gli oggetti Immediate sono "ref'ed", rendendo normalmente non necessario chiamare immediate.ref() a meno che immediate.unref() non sia stato chiamato in precedenza.
immediate.unref()
Aggiunto in: v9.7.0
- Restituisce: <Immediate> un riferimento a
immediate
Quando viene chiamato, l'oggetto Immediate attivo non richiederà che il ciclo di eventi di Node.js rimanga attivo. Se non ci sono altre attività che mantengono in esecuzione il ciclo di eventi, il processo potrebbe terminare prima che venga invocato il callback dell'oggetto Immediate. Chiamare immediate.unref() più volte non avrà alcun effetto.
immediate[Symbol.dispose]()
Aggiunto in: v20.5.0, v18.18.0
[Stable: 1 - Experimental]
Stable: 1 Stabilità: 1 - Sperimentale
Annulla l'immediate. Questo è simile alla chiamata a clearImmediate().
Classe: Timeout
Questo oggetto viene creato internamente e viene restituito da setTimeout() e setInterval(). Può essere passato a clearTimeout() o clearInterval() per annullare le azioni pianificate.
Per impostazione predefinita, quando un timer viene pianificato utilizzando setTimeout() o setInterval(), il ciclo di eventi di Node.js continuerà a essere eseguito finché il timer è attivo. Ciascuno degli oggetti Timeout restituiti da queste funzioni esporta sia le funzioni timeout.ref() che timeout.unref() che possono essere utilizzate per controllare questo comportamento predefinito.
timeout.close()
Aggiunto in: v0.9.1
[Stable: 3 - Legacy]
Stable: 3 Stabilità: 3 - Legacy: Utilizzare invece clearTimeout().
- Restituisce: <Timeout> un riferimento a
timeout
Annulla il timeout.
timeout.hasRef()
Aggiunto in: v11.0.0
- Restituisce: <boolean>
Se vero, l'oggetto Timeout manterrà attivo il ciclo di eventi di Node.js.
timeout.ref()
Aggiunto in: v0.9.1
- Restituisce: <Timeout> un riferimento a
timeout
Quando chiamata, richiede che il ciclo di eventi di Node.js non si chiuda fintanto che il Timeout è attivo. Chiamare timeout.ref() più volte non avrà alcun effetto.
Per impostazione predefinita, tutti gli oggetti Timeout sono "ref'ed", rendendo normalmente non necessario chiamare timeout.ref() a meno che timeout.unref() non sia stato chiamato in precedenza.
timeout.refresh()
Aggiunto in: v10.2.0
- Restituisce: <Timeout> un riferimento a
timeout
Imposta l'ora di inizio del timer all'ora corrente e riprogramma il timer per chiamare la sua callback alla durata specificata in precedenza, adattata all'ora corrente. Questo è utile per aggiornare un timer senza allocare un nuovo oggetto JavaScript.
Usare questo su un timer che ha già chiamato la sua callback riattiverà il timer.
timeout.unref()
Aggiunto in: v0.9.1
- Restituisce: <Timeout> un riferimento a
timeout
Quando chiamato, l'oggetto Timeout attivo non richiederà che il ciclo di eventi di Node.js rimanga attivo. Se non ci sono altre attività che mantengono attivo il ciclo di eventi, il processo potrebbe terminare prima che venga richiamata la callback dell'oggetto Timeout. Chiamare timeout.unref() più volte non avrà alcun effetto.
timeout[Symbol.toPrimitive]()
Aggiunto in: v14.9.0, v12.19.0
- Restituisce: <integer> un numero che può essere usato per fare riferimento a questo
timeout
Forza un Timeout a un primitivo. Il primitivo può essere usato per cancellare il Timeout. Il primitivo può essere usato solo nello stesso thread in cui è stato creato il timeout. Pertanto, per usarlo attraverso worker_threads deve prima essere passato al thread corretto. Ciò consente una maggiore compatibilità con le implementazioni di setTimeout() e setInterval() del browser.
timeout[Symbol.dispose]()
Aggiunto in: v20.5.0, v18.18.0
[Stabile: 1 - Sperimentale]
Stabile: 1 Stabilità: 1 - Sperimentale
Annulla il timeout.
Pianificazione dei timer
Un timer in Node.js è un costrutto interno che chiama una determinata funzione dopo un certo periodo di tempo. Il momento in cui viene chiamata la funzione di un timer varia a seconda del metodo utilizzato per creare il timer e del lavoro svolto dal ciclo di eventi di Node.js.
setImmediate(callback[, ...args])
[Cronologia]
| Versione | Modifiche |
|---|---|
| v18.0.0 | Passare una callback non valida all'argomento callback ora genera ERR_INVALID_ARG_TYPE invece di ERR_INVALID_CALLBACK. |
| v0.9.1 | Aggiunto in: v0.9.1 |
callback<Function> La funzione da chiamare alla fine di questo turno del Ciclo di eventi di Node.js...args<any> Argomenti opzionali da passare quando viene chiamata lacallback.- Restituisce: <Immediate> per l'utilizzo con
clearImmediate()
Pianifica l'esecuzione "immediata" della callback dopo le callback degli eventi I/O.
Quando vengono effettuate più chiamate a setImmediate(), le funzioni callback vengono accodate per l'esecuzione nell'ordine in cui vengono create. L'intera coda di callback viene elaborata a ogni iterazione del ciclo di eventi. Se un timer immediato viene accodato dall'interno di una callback in esecuzione, quel timer non verrà attivato fino alla successiva iterazione del ciclo di eventi.
Se callback non è una funzione, verrà generato un TypeError.
Questo metodo ha una variante personalizzata per le promise che è disponibile utilizzando timersPromises.setImmediate().
setInterval(callback[, delay[, ...args]])
[Cronologia]
| Versione | Modifiche |
|---|---|
| v18.0.0 | Passare una callback non valida all'argomento callback ora genera ERR_INVALID_ARG_TYPE invece di ERR_INVALID_CALLBACK. |
| v0.0.1 | Aggiunto in: v0.0.1 |
callback<Function> La funzione da chiamare quando il timer scade.delay<number> Il numero di millisecondi da attendere prima di chiamare lacallback. Predefinito:1....args<any> Argomenti opzionali da passare quando viene chiamata lacallback.- Restituisce: <Timeout> per l'utilizzo con
clearInterval()
Pianifica l'esecuzione ripetuta di callback ogni delay millisecondi.
Quando delay è maggiore di 2147483647 o inferiore a 1 o NaN, delay verrà impostato su 1. I ritardi non interi vengono troncati a un intero.
Se callback non è una funzione, verrà generato un TypeError.
Questo metodo ha una variante personalizzata per le promise che è disponibile utilizzando timersPromises.setInterval().
setTimeout(callback[, delay[, ...args]])
[Cronologia]
| Versione | Modifiche |
|---|---|
| v18.0.0 | Passare una callback non valida all'argomento callback ora genera ERR_INVALID_ARG_TYPE invece di ERR_INVALID_CALLBACK. |
| v0.0.1 | Aggiunto in: v0.0.1 |
callback<Function> La funzione da chiamare quando il timer scade.delay<number> Il numero di millisecondi da attendere prima di chiamare lacallback. Predefinito:1....args<any> Argomenti opzionali da passare quando viene chiamata lacallback.- Restituisce: <Timeout> per l'uso con
clearTimeout()
Pianifica l'esecuzione di una callback una tantum dopo delay millisecondi.
È probabile che la callback non venga richiamata esattamente dopo delay millisecondi. Node.js non fornisce garanzie sui tempi esatti di attivazione delle callback, né sul loro ordine. La callback verrà chiamata il più vicino possibile all'ora specificata.
Quando delay è maggiore di 2147483647 o inferiore a 1 o NaN, il delay verrà impostato su 1. I ritardi non interi vengono troncati a un intero.
Se callback non è una funzione, verrà generato un TypeError.
Questo metodo ha una variante personalizzata per le promise disponibile tramite timersPromises.setTimeout().
Annullamento dei timer
I metodi setImmediate(), setInterval() e setTimeout() restituiscono ciascuno oggetti che rappresentano i timer pianificati. Questi possono essere utilizzati per annullare il timer e impedirne l'attivazione.
Per le varianti promesse di setImmediate() e setTimeout(), è possibile utilizzare un AbortController per annullare il timer. Quando viene annullato, le promise restituite verranno rifiutate con un 'AbortError'.
Per setImmediate():
import { setImmediate as setImmediatePromise } from 'node:timers/promises';
const ac = new AbortController();
const signal = ac.signal;
// Non `await` la promise, quindi `ac.abort()` viene chiamato contemporaneamente.
setImmediatePromise('foobar', { signal })
.then(console.log)
.catch((err) => {
if (err.name === 'AbortError')
console.error('L'immediate è stato interrotto');
});
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('L'immediate è stato interrotto');
});
ac.abort();Per setTimeout():
import { setTimeout as setTimeoutPromise } from 'node:timers/promises';
const ac = new AbortController();
const signal = ac.signal;
// Non `await` la promise, quindi `ac.abort()` viene chiamato contemporaneamente.
setTimeoutPromise(1000, 'foobar', { signal })
.then(console.log)
.catch((err) => {
if (err.name === 'AbortError')
console.error('Il timeout è stato interrotto');
});
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('Il timeout è stato interrotto');
});
ac.abort();clearImmediate(immediate)
Aggiunto in: v0.9.1
immediate<Immediate> Un oggettoImmediatecome restituito dasetImmediate().
Annulla un oggetto Immediate creato da setImmediate().
clearInterval(timeout)
Aggiunto in: v0.0.1
timeout<Timeout> | <string> | <number> Un oggettoTimeoutcome restituito dasetInterval()o il primitivo dell'oggettoTimeoutcome stringa o numero.
Annulla un oggetto Timeout creato da setInterval().
clearTimeout(timeout)
Aggiunto in: v0.0.1
timeout<Timeout> | <string> | <number> Un oggettoTimeoutcome restituito dasetTimeout()o il primitivo dell'oggettoTimeoutcome stringa o numero.
Annulla un oggetto Timeout creato da setTimeout().
API Timer basate su Promise
[Cronologia]
| Versione | Modifiche |
|---|---|
| v16.0.0 | Uscito dalla fase sperimentale. |
| v15.0.0 | Aggiunto in: v15.0.0 |
L'API timers/promises fornisce un set alternativo di funzioni timer che restituiscono oggetti Promise. L'API è accessibile tramite 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]]])
Aggiunto in: v15.0.0
delay<number> Il numero di millisecondi da attendere prima di soddisfare la promise. Predefinito:1.value<any> Un valore con cui la promise viene soddisfatta.options<Object>ref<boolean> Imposta sufalseper indicare che ilTimeoutpianificato non dovrebbe richiedere che il ciclo di eventi di Node.js rimanga attivo. Predefinito:true.signal<AbortSignal> UnAbortSignalopzionale che può essere utilizzato per annullare ilTimeoutpianificato.
import {
setTimeout,
} from 'node:timers/promises';
const res = await setTimeout(100, 'result');
console.log(res); // Stampa 'result'const {
setTimeout,
} = require('node:timers/promises');
setTimeout(100, 'result').then((res) => {
console.log(res); // Stampa 'result'
});timersPromises.setImmediate([value[, options]])
Aggiunto in: v15.0.0
value<any> Un valore con cui la promise viene soddisfatta.options<Object>ref<boolean> Imposta sufalseper indicare che l'Immediatepianificato non dovrebbe richiedere che il ciclo di eventi di Node.js rimanga attivo. Predefinito:true.signal<AbortSignal> UnAbortSignalopzionale che può essere utilizzato per annullare l'Immediatepianificato.
import {
setImmediate,
} from 'node:timers/promises';
const res = await setImmediate('result');
console.log(res); // Stampa 'result'const {
setImmediate,
} = require('node:timers/promises');
setImmediate('result').then((res) => {
console.log(res); // Stampa 'result'
});timersPromises.setInterval([delay[, value[, options]]])
Aggiunto in: v15.9.0
Restituisce un iteratore asincrono che genera valori in un intervallo di delay ms. Se ref è true, è necessario chiamare next() dell'iteratore asincrono esplicitamente o implicitamente per mantenere attivo il ciclo di eventi.
delay<number> Il numero di millisecondi da attendere tra le iterazioni. Predefinito:1.value<any> Un valore con cui l'iteratore restituisce.options<Object>ref<boolean> Imposta sufalseper indicare che ilTimeoutpianificato tra le iterazioni non dovrebbe richiedere che il ciclo di eventi di Node.js rimanga attivo. Predefinito:true.signal<AbortSignal> UnAbortSignalopzionale che può essere utilizzato per annullare ilTimeoutpianificato tra le operazioni.
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])
Aggiunto in: v17.3.0, v16.14.0
[Stabile: 1 - Sperimentale]
Stabile: 1 Stabilità: 1 - Sperimentale
delay<number> Il numero di millisecondi da attendere prima di risolvere la promise.options<Object>ref<boolean> Imposta sufalseper indicare che ilTimeoutpianificato non dovrebbe richiedere che il ciclo di eventi di Node.js rimanga attivo. Predefinito:true.signal<AbortSignal> UnAbortSignalopzionale che può essere utilizzato per annullare l'attesa.
Restituisce: <Promise>
Un'API sperimentale definita dalla bozza di Scheduling APIs in fase di sviluppo come API standard della piattaforma Web.
Chiamare timersPromises.scheduler.wait(delay, options) è equivalente a chiamare timersPromises.setTimeout(delay, undefined, options).
import { scheduler } from 'node:timers/promises';
await scheduler.wait(1000); // Attendi un secondo prima di continuaretimersPromises.scheduler.yield()
Aggiunto in: v17.3.0, v16.14.0
[Stabile: 1 - Sperimentale]
Stabile: 1 Stabilità: 1 - Sperimentale
- Restituisce: <Promise>
Un'API sperimentale definita dalla bozza di specifica delle Scheduling APIs in fase di sviluppo come API standard della piattaforma Web.
Chiamare timersPromises.scheduler.yield() equivale a chiamare timersPromises.setImmediate() senza argomenti.