Aujourd'hui, je vais vous parler de la classe EventEmitter. Comme vous le savez, Node.js a un paradigme de programmation événementielle. Cela signifie que nous définirons certains événements et rappels, nos événements seront déclenchés et traités dans notre flux de programme. Si vous demandez pourquoi une telle approche a été adoptée, c'est parce que JavaScript, que j'ai expliqué plus en détail dans mon article précédent, exécute un seul thread et que les opérations asynchrones doivent être gérées sans blocage d'une manière ou d'une autre.
Si vous demandez ce que tout cela a à voir avec la classe EventEmitter, cette classe nous offre une structure où nous pouvons facilement gérer des opérations asynchrones. En fait, il s'agit de l'implémentation du modèle de conception Observer.
const EventEmitter = require("events"); class Emitter extends EventEmitter {} const myE = new Emitter(); myE.on("test", () => { console.log("event meydana geldi."); }); myE.on("test", () => { console.log("event meydana geldi."); }); myE.on("test", () => { console.log("event meydana geldi."); }); console.log(myE.eventNames()); myE.emit("test");
Ci-dessus, j'ai écrit un exemple simple de la façon de définir et d'appeler un événement. Ici, la méthode "on" crée en fait un tableau appelé "test" sur un objet vide (objet maître).
{ test: [ [Function (anonymous)], [Function (anonymous)], [Function (anonymous)] ] }
Ici, la méthode "on" est appelée trois fois avec le nom eventName et la structure résultante est comme ci-dessus.
Comme vous pouvez le deviner, l'événement nommé "test" est appelé avec la méthode "emit". Ici, une méthode foreach renvoie le tableau de test et appelle les fonctions qu'il contient.
Alors, où est utilisée cette structure ?
Par exemple, dans un événement DOM ;
const btn = document.getElementById("btn"); btn.addEventListener("click", () => { console.log("clicked"); });
Par exemple, dans une requête Réseau dans une application Node.js ;
const http = require("http"); const req = http .request( { method: "GET", hostname: "jsonplaceholder.typicode.com", path: "/todos/1" }, (res) => { res.on("data", (chunk) => { console.log(chunk.toString()); }); res.on("end", () => { console.log("response ended."); }); } ) .end();
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!