đą Node.js
đ Les diffĂ©rents modules core
Events
Le module Events va permettre de crĂ©er et manipuler un des Ă©lĂ©ments les plus importants de Node.js: lâEvent Emitter (il y a aussi depuis peu Event Target qui est une API compatible avec le navigateur).
Les diffĂ©rents modules de Node.js comme HTTP, Net, Child process ainsi que les Streams sont majoritairement construits Ă lâaide dâEvent Emitter.
const fs = require("node:fs");
const stream = fs.createReadStream("./myFile.txt");
stream.on("data", (chunk) => console.log(chunk));
stream.on("end", () => console.log("stream finished!"));
stream.on("error", console.error);
Exemple ci-dessus avec un Read Stream ou nous exploitons les Ă©vĂšnements âdataâ, âendâ ou encore âerrorâ (merci de pas reproduire ce code en production ^^).
Ce sont des structures complĂštement Synchrone dans lesquelles nous pouvons lier un nom dâĂ©vĂšnement (emitter) Ă une ou plusieurs functions (listeners). Les Ă©vĂšnements qui seront Ă©mis sont gĂ©rĂ©s en FIFO (First in First out).
Cela va nous permettre de mettre en place diverses patterns ou le code fonctionnera par le biais de communication entre différents objets.
import { EventEmitter, once } from "node:events";
const ee = new EventEmitter();
setImmediate(() => ee.emit("foo", "hello world!"));
const [message] = await once(ee, "foo");
console.log(message);
Une class en JavaScript peut sâĂ©tendre dâun EventEmitter.
import { EventEmitter } from "node:events";
class User extends EventEmitter {
sayHello() {
this.emit("hello");
}
}
const bob = new User();
bob.on("hello", () => console.log("bob say hello!"));
bob.sayHello();
Câest pratique si vous voulez construire un systĂšme modulaire ou diffĂ©rent objets (class) communiquent par le biais de messages (les Addons dans SlimIO utilisent beaucoup ce principe).
Il est aussi bon de noter que depuis quelques versions la mĂ©thode âonâ dâevents est AsyncIterable.
import { EventEmitter, on } from "node:events";
const ee = new EventEmitter();
setImmediate(() => {
ee.emit("data", "foo");
ee.emit("data", "bar");
});
for await (const [data] of on(ee, "data")) {
console.log(data);
}
[!NOTE] Node.js supporte maintenant aussi lâAPI Web EventTarget
âŹ ïž đ Les diffĂ©rents modules core: Console | âĄïž đ Les diffĂ©rents modules core: Path