Vorwort In letzter Zeit besteht eine Nachfrage nach Großhandelswaren. Wir müssen entsprechende Großhandelswaren für verschiedene Händler auswählen und sie wieder auf der ursprünglichen Benutzeroberfläche anzeigen. Da sich der Code des Projekts auf dem Antiquitätenniveau des Unternehmens befindet (diese Art von Code ist für Programmierer eine Qual), gehen wir bei der Lösung von Problemen sehr vorsichtig vor. Um dieses Problem zu vermeiden und externe Abhängigkeiten zu reduzieren, kapseln Sie Ereignisverteilungsfunktionen manuell. 1. Was ist Wir wissen, dass Node einen ereignisgesteuerten Mechanismus verwendet, und EventEmitter ist die Grundlage für die ereignisgesteuerte Implementierung von Node. Basierend auf EventEmitter erben fast alle Module von Node diese Klasse. Diese Module haben ihre eigenen Ereignisse, die Listener binden/auslösen und asynchrone Vorgänge implementieren können. 2. So verwenden Sie EventEmitter in nodejs Das Ereignismodul von Node stellt nur eine EventEmitter-Klasse bereit, die das grundlegende Muster der asynchronen ereignisgesteuerten Architektur von Node implementiert – das Beobachtermuster. In diesem Muster verwaltet das beobachtete (Subjekt) eine Gruppe von Beobachtern, die von anderen Objekten gesendet (registriert) werden. Wenn ein neues Objekt an dem Subjekt interessiert ist, registriert es den Beobachter, und wenn es kein Interesse hat, meldet es sich ab. Wenn das Subjekt aktualisiert wird, benachrichtigt es wiederum die Beobachter. const EventEmitter = erfordern('Ereignisse') Klasse MyEmitter erweitert EventEmitter {} const myEmitter = new MyEmitter() Funktion Rückruf() { console.log('Das Ereignis wurde ausgelöst!') } myEmitter.on('Ereignis', Rückruf) myEmitter.emit('Ereignis') myEmitter.removeListener('Ereignis', Rückruf); 3. Implementierungsprozess Der Basiscode lautet wie folgt: //Ereignisverteilungsmechanismus (function() { var EventDispatcher = Funktion() { var EventDispatcherClosure = Funktion() { }; EventDispatcherClosure.prototype = { /** * Ereignis registrieren * @param {Object} key * @param {Objekt} fn */ ein: Funktion (Taste, fn) { //Das aktuelle Ereignisobjekt abrufen var curEvents = this._getCurEvents(key); //Zuerst prüfen, ob das Ereignis registriert wurde var flag = false; für (var i = 0, len = curEvents.length; i < len; i++) { wenn (curEvents[i].name == fn.name) { //Es ist bereits erschienen, die zuletzt registrierte Funktion ist das Hauptflag = true; aktuelleEreignisse[i] = fn; brechen; } } wenn (!flag) { curEvents[curEvents.Länge] = fn; } this._register(Schlüssel, aktuelleEreignisse); }, /** * Ereignis versenden * @param {Object} Schlüssel * @param {Objekt} Daten */ Versand: Funktion (Schlüssel) { //Das aktuelle Ereignisobjekt abrufen var curEvents = this._getCurEvents(key); var sollteDispatch = true; für (var i = 0, len = curEvents.length; shouldDispatch && i < len; i++) { versuchen { //Parameter abrufen var args = []; für (var j = 1, len1 = Argumente.Länge; j < len1; j++) { args.push(Argumente[j]); } sollteDispatch = curEvents[i].apply({}, args); } fangen (e) { sollteDispatch = falsch; } } Rückgabe sollteDispatch; }, entfernen: Funktion(Taste) { wenn (this._getCurEvents(Schlüssel)) { lösche EventDispatcherClosure.events[key]; } }, /** * Ereignisliste basierend auf Schlüssel abrufen * @param {Object} Schlüssel */ _getCurEvents: Funktion(Schlüssel) { gibt EventDispatcherClosure.events[Schlüssel] zurück || []; }, /** * Registrierungszeit* @param {Object} key * @param {Object} Ereignisse */ _register: Funktion (Schlüssel, Ereignisse) { EventDispatcherClosure.events[Schlüssel] = Ereignisse; }, }; EventDispatcherClosure.events = {}; zurückkehren { erstellen: function() { gibt einen neuen EventDispatcherClosure() zurück; } }; }; Fenster.EventDispatcher = neuer EventDispatcher().create(); })(); Definieren Sie zunächst eine anonyme Funktion einer globalen Variablen und hängen Sie dann die globale Variable an das Fenster, damit wir sie während des Entwicklungsprozesses aufrufen können. Fügen Sie der Prototypkette der anonymen Funktion Ereignisverteilung, Ereignisüberwachung, Ereignislöschung und andere Methoden hinzu. Ereignisdispatchaufruf EventDispatcher.dispatch("test", Objekt) Ereignisüberwachung EventDispatcher.on("test", Funktion Rückruf(Objekt) { }) Ereignislöschung EventDispatcher.on("test") Die Codekapselung ist relativ einfach Dies ist das Ende dieses Artikels zum Anpassen der Implementierung eines EventEmitters in node.js. Weitere Informationen zur Implementierung eines EventEmitters in node finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: So verwenden Sie nginx, um auf lokale statische Ressourcen auf einem Linux-Server zuzugreifen
>>: Zwei Abfragemethoden, wenn der MySQL-Abfragefeldtyp JSON ist
Vorteile eines programmatischen Ansatzes 1. Globa...
Inhaltsverzeichnis 1. Hintergrund 2. Bedienungssc...
RGBA ist eine CSS-Farbe, mit der Farbwert und Tra...
Inhaltsverzeichnis Das Grundprinzip von MySQL Mas...
Vorwort: Bei der täglichen Verwendung der Datenba...
1. scale()-Methode Zoom steht für „Verkleinern“ u...
Ergebnisse erzielen Implementierungscode <h1&g...
Inhaltsverzeichnis Komponente zur Leistungsoptimi...
Ein Bildlink <img src="" /> Ich m...
Vor Kurzem musste ich einen kaskadierenden Auswah...
Inhaltsverzeichnis Mehrere bedingte Anweisungen M...
Inhaltsverzeichnis Vorwort 1. Benutzerdefinierter...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis 1. Planaufgaben anpassen 2. Ze...
Vorwort In der Datenbank sind einige Datentabelle...