đą 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)