


So erstellen Sie einen benutzerdefinierten Prioritätsereignis-Emitter in Node.js
Aufstellen:
Installation und Einrichtung von Bibliotheken
npm i -d @types/node tsx typescript npx tsc --init
Ändern Sie tsconfig.json und package.json
// tsconfig.json { "compilerOptions": { "target": "es2016", "module": "ES6", "moduleResolution": "nodenext", "allowImportingTsExtensions": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "strict": true, "skipLibCheck": true, "sourceMap": true, "outDir": "./dist", "types": ["node"] }, "include": ["src/**/*.ts"], "exclude": ["node_modules"] } // package.json { "name": "node-starter", "version": "0.0.0", "type": "module", // This should be set to "module" for using ES6 modules "scripts": { "test": "jest" }, "devDependencies": { "@types/jest": "^29.5.14", "jest": "^29.7.0", "typescript": "^5.7.2" }, "dependencies": { "@types/node": "^22.10.2", "tsx": "^4.19.2" } }
EventEmitter in Node.js verstehen
Node.js verwendet EventEmitter als grundlegende Klasse für die Verarbeitung von Ereignissen in der asynchronen Programmierung. Mit dieser Klasse können Sie Listener für bestimmte Ereignisse registrieren und diese Ereignisse bei Bedarf ausgeben. Standardmäßig verarbeitet EventEmitter Ereignisse in der Reihenfolge, in der die Listener hinzugefügt wurden. Manchmal möchten wir jedoch möglicherweise der Ausführung bestimmter Listener Vorrang vor anderen einräumen. Hier können wir ein prioritätsbasiertes Veranstaltungssystem einführen.
Schritte zum Erstellen eines Prioritäts-EventEmitters
-
Von EventEmitter erben:
Um einen benutzerdefinierten Ereignisemitter mit Prioritätsbehandlung zu erstellen, müssen wir die integrierte EventEmitter-Klasse erweitern. Dadurch erhalten wir Zugriff auf alle integrierten Methoden wie „on“, „emit“ und „removeListener“.
import EventEmitter from 'events'; export class PriorityEmitter extends EventEmitter { private _listeners: Record< string, { listener: (...args: any[]) => void; priority: number }[] >; constructor() { super(); this._listeners = {}; } }
Nach dem Login kopieren
- `PriorityEmitter` extends `EventEmitter`, so it inherits all of its functionality. - We introduce a new internal property `_listeners` to store listeners along with their priorities.
-
Überschreiben der on-Methode:
Durch Überschreiben der on-Methode können wir eine benutzerdefinierte Logik hinzufügen, um die Listener zusammen mit ihren Prioritäten zu speichern und sie basierend auf ihrer Priorität zu sortieren.
on(event: string, listener: (...args: any[]) => void, priority = 0) { if (!this._listeners[event]) this._listeners[event] = []; this._listeners[event].push({ listener, priority }); this._listeners[event].sort((a, b) => b.priority - a.priority); return this; }
Nach dem Login kopieren
- For production usage, consider using other data structures instead of arrays, which maintain order. - When a listener is added using `on`, we push the listener and its priority into the `_listeners` array. - We then sort the listeners in descending order based on the priority. This ensures that higher-priority listeners are executed first. - The default priority is `0` if not specified.
-
Überschreiben der Emit-Methode:
Die emit-Methode löst das Ereignis aus und führt die Listener aus. Bei der überschriebenen Methode verarbeiten wir zunächst die Listener von _listeners basierend auf ihrer Priorität.
emit(event: string, ...args: any[]) { if (this._listeners[event]) { for (const { listener } of this._listeners[event]) { listener(...args); } } return super.emit(event, ...args); }
Nach dem Login kopieren
- For the given event, we iterate over the sorted listeners and call each listener. - After handling the custom priority-based logic, we call the parent class’s `emit` method to ensure the standard behavior is also preserved.
-
Überschreiben der Methode „removeListener“:
Die Methode „removeListener“ wird überschrieben, um sicherzustellen, dass Listener basierend auf ihrer Referenz korrekt entfernt werden. Da wir Listener zusammen mit ihren Prioritäten speichern, filtern wir den richtigen Listener heraus.
removeListener(event: string, listener: (...args: any[]) => void) { if (this._listeners[event]) { this._listeners[event] = this._listeners[event].filter( (stored_listener) => stored_listener.listener !== listener ); } super.removeListener(event, listener); return this; }
Nach dem Login kopieren
- We filter the listener array to remove the listener with the exact reference. - Then we call `super.removeListener` to ensure proper cleanup and avoid memory leaks.
So funktioniert der PriorityEmitter
- Wenn ein Ereignis ausgegeben wird, werden Listener in der Reihenfolge ihrer Priorität aufgerufen. Je höher die Priorität, desto früher wird es ausgeführt.
- Listener mit gleicher Priorität werden in der Reihenfolge ausgeführt, in der sie hinzugefügt wurden.
Beispielverwendung
Hier ist ein Beispiel, um zu zeigen, wie der PriorityEmitter in der Praxis funktioniert:
const pe = new PriorityEmitter(); // Listener with higher priority pe.on('greet', (name: string) => { console.log(`Hello ${name}!`); }, 2); // Listener with lower priority pe.on('greet', (name: string) => { console.log(`Hi, ${name}!`); }, 1); // Emitting the event pe.emit('greet', 'Alice');
Ausgabe:
npm i -d @types/node tsx typescript npx tsc --init
- Der Zuhörer mit der Priorität 2 (Hallo Alice!) wird zuerst aufgerufen.
- Der Zuhörer mit der Priorität 1 (Hallo, Alice!) wird als nächstes aufgerufen.
Leistungsaspekte
- Datenstrukturauswahl: In diesem einfachen Beispiel verwenden wir ein Array zum Speichern von Listenern und sortieren sie jedes Mal, wenn ein Listener hinzugefügt wird. Dies kann bei einer großen Anzahl von Zuhörern ineffizient werden. Eine bessere Lösung für den Umgang mit Prioritäten in einer leistungskritischen Umgebung wäre die Verwendung eines Max-Heaps, der effiziente Einfüge- und Entfernungsvorgänge ermöglicht.
- Verwendung in der Produktion: Erwägen Sie für Anwendungen auf Produktionsebene die Verwendung erweiterter Datenstrukturen oder externer Bibliotheken, die Prioritätswarteschlangen bereitstellen, um eine große Anzahl von Ereignissen effizienter zu verarbeiten.
Vollständiger Code
// tsconfig.json { "compilerOptions": { "target": "es2016", "module": "ES6", "moduleResolution": "nodenext", "allowImportingTsExtensions": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "strict": true, "skipLibCheck": true, "sourceMap": true, "outDir": "./dist", "types": ["node"] }, "include": ["src/**/*.ts"], "exclude": ["node_modules"] } // package.json { "name": "node-starter", "version": "0.0.0", "type": "module", // This should be set to "module" for using ES6 modules "scripts": { "test": "jest" }, "devDependencies": { "@types/jest": "^29.5.14", "jest": "^29.7.0", "typescript": "^5.7.2" }, "dependencies": { "@types/node": "^22.10.2", "tsx": "^4.19.2" } }
Das obige ist der detaillierte Inhalt vonSo erstellen Sie einen benutzerdefinierten Prioritätsereignis-Emitter in Node.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

Zu den Hauptanwendungen von JavaScript in der Webentwicklung gehören die Interaktion der Clients, die Formüberprüfung und die asynchrone Kommunikation. 1) Dynamisches Inhaltsaktualisierung und Benutzerinteraktion durch DOM -Operationen; 2) Die Kundenüberprüfung erfolgt vor dem Einreichung von Daten, um die Benutzererfahrung zu verbessern. 3) Die Aktualisierung der Kommunikation mit dem Server wird durch AJAX -Technologie erreicht.

Die Anwendung von JavaScript in der realen Welt umfasst Front-End- und Back-End-Entwicklung. 1) Zeigen Sie Front-End-Anwendungen an, indem Sie eine TODO-Listanwendung erstellen, die DOM-Operationen und Ereignisverarbeitung umfasst. 2) Erstellen Sie RESTFUFFUPI über Node.js und express, um Back-End-Anwendungen zu demonstrieren.

Es ist für Entwickler wichtig, zu verstehen, wie die JavaScript -Engine intern funktioniert, da sie effizientere Code schreibt und Leistungs Engpässe und Optimierungsstrategien verstehen kann. 1) Der Workflow der Engine umfasst drei Phasen: Parsen, Kompilieren und Ausführung; 2) Während des Ausführungsprozesses führt die Engine dynamische Optimierung durch, wie z. B. Inline -Cache und versteckte Klassen. 3) Zu Best Practices gehören die Vermeidung globaler Variablen, die Optimierung von Schleifen, die Verwendung von const und lass und die Vermeidung übermäßiger Verwendung von Schließungen.

Sowohl Python als auch JavaScripts Entscheidungen in Entwicklungsumgebungen sind wichtig. 1) Die Entwicklungsumgebung von Python umfasst Pycharm, Jupyternotebook und Anaconda, die für Datenwissenschaft und schnelles Prototyping geeignet sind. 2) Die Entwicklungsumgebung von JavaScript umfasst Node.JS, VSCODE und WebPack, die für die Entwicklung von Front-End- und Back-End-Entwicklung geeignet sind. Durch die Auswahl der richtigen Tools nach den Projektbedürfnissen kann die Entwicklung der Entwicklung und die Erfolgsquote der Projekte verbessert werden.

C und C spielen eine wichtige Rolle in der JavaScript -Engine, die hauptsächlich zur Implementierung von Dolmetschern und JIT -Compilern verwendet wird. 1) C wird verwendet, um JavaScript -Quellcode zu analysieren und einen abstrakten Syntaxbaum zu generieren. 2) C ist für die Generierung und Ausführung von Bytecode verantwortlich. 3) C implementiert den JIT-Compiler, optimiert und kompiliert Hot-Spot-Code zur Laufzeit und verbessert die Ausführungseffizienz von JavaScript erheblich.

Python eignet sich besser für Datenwissenschaft und Automatisierung, während JavaScript besser für die Entwicklung von Front-End- und Vollstapel geeignet ist. 1. Python funktioniert in Datenwissenschaft und maschinellem Lernen gut und unter Verwendung von Bibliotheken wie Numpy und Pandas für die Datenverarbeitung und -modellierung. 2. Python ist prägnant und effizient in der Automatisierung und Skripten. 3. JavaScript ist in der Front-End-Entwicklung unverzichtbar und wird verwendet, um dynamische Webseiten und einseitige Anwendungen zu erstellen. 4. JavaScript spielt eine Rolle bei der Back-End-Entwicklung durch Node.js und unterstützt die Entwicklung der Vollstapel.

JavaScript wird in Websites, mobilen Anwendungen, Desktop-Anwendungen und serverseitigen Programmierungen häufig verwendet. 1) In der Website -Entwicklung betreibt JavaScript DOM zusammen mit HTML und CSS, um dynamische Effekte zu erzielen und Frameworks wie JQuery und React zu unterstützen. 2) Durch reaktnatives und ionisches JavaScript wird ein plattformübergreifendes mobile Anwendungen entwickelt. 3) Mit dem Elektronenframework können JavaScript Desktop -Anwendungen erstellen. 4) Node.js ermöglicht es JavaScript, auf der Serverseite auszuführen und unterstützt hohe gleichzeitige Anforderungen.
