Skip to the content.

🐱 Node.js

🌟 Les diffĂ©rents modules core

Timers

Le module Timers de Node.js contient des fonctions qui exĂ©cutent le code aprĂšs une pĂ©riode de temps dĂ©terminĂ©e. Il n’est pas nĂ©cessaire d’importer les timers via require(), car toutes les mĂ©thodes sont disponibles globalement pour Ă©muler l’API JavaScript du navigateur.

Je vous recommande d’aller lire le guide officiel de Node.js sur les timers.

Les functions disponibles sont le setImmediate, setTimeout et setInterval.

setImmediate est une function unique Ă  Node.js (elle n’existe pas dans le navigateur) et elle permet d’exĂ©cuter du code au dĂ©but de la prochaine itĂ©ration de l’event-loop.

import { setInterval } from "node:timers/promises";

for await (const startTime of setInterval(100, Date.now())) {
    const now = Date.now();
    console.log(now);
    if ((now - startTime) > 1000) {
        break;
    }
}
console.log(Date.now());

Noter qu’il est possible d’appeler la mĂ©thode unref sur un timer pour que l’event-loop puisse s’arrĂȘter mĂȘme si le timer est encore actif. C’est trĂšs utile dans les cas oĂč vous ne voulez absolument pas qu’un timer (interval par exemple) puisse empĂȘcher l’event-loop de s’arrĂȘter.

C’est par exemple le cas dans le package SlimIO/Config ou un setInterval est utilisĂ© pour constamment nettoyer des Observables qui ont Ă©tĂ© clĂŽturĂ©s (pour Ă©viter un memory-leak). NĂ©anmoins je ne souhaite pas que le timer en question empĂȘche l’arrĂȘt de l’event-loop dans le cas oĂč quelqu’un utiliserait mon package :)

Annuler un timer

Il est possible d’annuler un timer avec un AbortSignal (sur l’API promises).

import * as timers from "node:timers/promises";

await timers.setTimeout(10_000, {
    signal: AbortSignal.timeout(500)
});

Liens


âŹ…ïž 🌟 Les diffĂ©rents modules core: FileSystem (fs) | âžĄïž 🌟 Les diffĂ©rents modules core: URL (API WHATWG)