Inhaltsverzeichnis
Die vorherigen Wörter
EventEmitter
事件
Heim Web-Frontend js-Tutorial Beispiel-Tutorial zu Ereignissen in NodeJS-Ereignissen

Beispiel-Tutorial zu Ereignissen in NodeJS-Ereignissen

Jun 26, 2017 am 11:48 AM
events javascript nodejs 事件

Die vorherigen Wörter

Das Ereignismodul ist das Kernmodul des Knotens. Fast alle häufig verwendeten Knotenmodule erben das Ereignismodul, z. B. http, fs usw. In diesem Artikel wird der Ereignismechanismus in nodeJS im Detail vorgestellt

EventEmitter

Die meisten Node.js-Kern-APIs verwenden eine idiomatische asynchrone ereignisgesteuerte Architektur, in der bestimmte Arten von Objekte (Trigger genannt) lösen regelmäßig ein benanntes Ereignis aus, um ein Funktionsobjekt (Listener) aufzurufen. Beispielsweise löst ein net.Server-Objekt jedes Mal ein Ereignis aus, wenn eine neue Verbindung besteht; ein fs.ReadStream löst ein Ereignis aus, wenn eine Datei geöffnet wird; ein Stream löst ein Ereignis aus, wenn die Daten lesbar sind.

【EventEmitter】

Die EventEmitter-Klasse wird vom Ereignismodul definiert und geöffnet. Alle Objekte, die Ereignisse auslösen können, sind Instanzen der EventEmitter-Klasse

var EventEmitter = require('events');/*{ [Function: EventEmitter]
  EventEmitter: [Circular],
  usingDomains: false,
  defaultMaxListeners: [Getter/Setter],
  init: [Function],
  listenerCount: [Function] } */console.log(EventEmitter);
Nach dem Login kopieren

Das EventEmitter-Attribut des Ereignismoduls zeigt auf das Modul selbst

var events = require('events');
console.log(events.EventEmitter === events);//true
Nach dem Login kopieren

EventEmitter ist ein Konstruktor, der zum Generieren einer Instanz des Ereignisgenerator-Emitters

var EventEmitter = require('events');var emitter = new EventEmitter();/*EventEmitter {
  domain: null,
  _events: {},
  _eventsCount: 0,
  _maxListeners: undefined } */console.log(emitter);
Nach dem Login kopieren

Methode

[emitter.emit(eventName[, ...args])]

eventName <any>...args <any>
Nach dem Login kopieren
Diese Methode ruft synchron jeden für das Ereignis namens „eventName“ registrierten Listener in der Reihenfolge auf, in der die Listener registriert sind, und übergibt dabei die bereitgestellten Parameter. Wenn das Ereignis einen Listener hat, geben Sie true zurück, andernfalls geben Sie false zurück. Funktion am Ende des Listener-Arrays für das Ereignis namens eventName

var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.on('test1',function(){});
console.log(emitter.emit('test1'));//trueconsole.log(emitter.emit('test2'));//false
Nach dem Login kopieren
[Hinweis] Überprüft nicht, ob der Listener wurde hinzugefügt. Mehrmaliges Aufrufen und Übergeben desselben eventNamens und Listeners führt dazu, dass der Listener mehrmals hinzugefügt und aufgerufen wird

Diese Methode gibt eine EventEmitter-Referenz zurück, die in a aufgerufen werden kann Kette
eventName <any> 事件名
listener <Function> 回调函数
Nach dem Login kopieren
Nach dem Login kopieren

[emitter.addListener(eventName, listener)]
var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.on('test',function(){
    console.log(1);
});
emitter.on('test',function(){
    console.log(2);
});
emitter.emit('test');//1 2
Nach dem Login kopieren
  Alias ​​​​von emitter.on(eventName, listener)

var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.on('test',function(){
    console.log(1);
}).on('test',function(){
    console.log(2);
});
emitter.emit('test');//1 2
Nach dem Login kopieren
【emitter.prependListener()】

Im Gegensatz zur on()-Methode kann die prependListener()-Methode verwendet werden, um Ereignis-Listener am Anfang des Listener-Arrays hinzuzufügen

var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.addListener('test',function(){
    console.log(1);
});
emitter.emit('test');//1
Nach dem Login kopieren
【emitter.once(eventName, listener)】

 Diese Methode fügt dem Ereignis namens eventName eine einmalige Listener-Funktion hinzu. Wenn das eventName-Ereignis das nächste Mal ausgelöst wird, wird der Listener entfernt und dann

var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.on('test',function(){
    console.log(1);
}).prependListener('test',function(){
    console.log(2);
});
emitter.emit('test');//2 1
Nach dem Login kopieren

[emitter.prependOnceListener()]

 Diese Methode wird verwendet, um einen Ereignis-Listener am Anfang des Listener-Arrays hinzuzufügen. Wenn das eventName-Ereignis das nächste Mal ausgelöst wird, wird der Listener entfernt und dann
eventName <any> 事件名
listener <Function> 回调函数
Nach dem Login kopieren
Nach dem Login kopieren
var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.on('test',function(){
    console.log(1);
}).once('test',function(){
    console.log(2);
});
emitter.emit('test');//1 2emitter.emit('test');//1
Nach dem Login kopieren
[emitter.removeAllListeners([eventName])]

 Entfernen Sie alle oder bestimmte EventName-Listener und geben Sie eine EventEmitter-Referenz zurück, die in einer Kette aufgerufen werden kann

 [Hinweis] Es ist eine schlechte Idee, an anderer Stelle im Codeansatz hinzugefügte Listener zu entfernen. insbesondere, wenn die EventEmitter-Instanz von einer anderen Komponente oder einem anderen Modul (z. B. Socket oder Dateistream) erstellt wird
var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.on('test',function(){
    console.log(1);
}).prependOnceListener('test',function(){
    console.log(2);
});
emitter.emit('test');//2 1emitter.emit('test');//1
Nach dem Login kopieren

[emitter.removeListener(eventName, listener)]
eventName <any>
Nach dem Login kopieren

Entfernen Sie den angegebenen Listener aus dem Listener-Array des Ereignisses namens eventName

var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.on('test',function(){
    console.log(1);
}).removeAllListeners('test');
emitter.emit('test');//''
Nach dem Login kopieren

[Hinweis] RemoveListener entfernt nur den Listener aus Entfernt a Listener-Instanz aus dem Listener-Array. Wenn ein einzelner Listener mehrmals zum Listener-Array für einen angegebenen Ereignisnamen hinzugefügt wird, muss „removeListener“ mehrmals aufgerufen werden, um jede Instanz zu entfernen

eventName <any>listener 
Nach dem Login kopieren

[Hinweis] Einmal, wenn ein Ereignis vorliegt ausgelöst, werden alle daran gebundenen Listener nacheinander ausgelöst. Dies bedeutet, dass jeder Aufruf von „removeListener()“ oder „removeAllListeners()“, nachdem das Ereignis ausgelöst wurde, aber bevor die Ausführung des letzten Listeners abgeschlossen ist, diese nicht aus emit() entfernt. Nachfolgende Ereignisse werden wie erwartet eintreten

Da Listener mithilfe interner Arrays verwaltet werden, ändert dieser Aufruf den Positionsindex aller registrierten Listener, nachdem der Listener entfernt wurde. Dies hat zwar keinen Einfluss auf die Reihenfolge, in der die Listener aufgerufen werden, bedeutet jedoch, dass die Kopie des von der Methode emitter.listeners() zurückgegebenen Listener-Arrays neu erstellt werden muss
var EventEmitter = require('events');var emitter = new EventEmitter();function show(){
    console.log(1);
}
emitter.on('test',show).removeListener('test',show);
emitter.emit('test');//''
Nach dem Login kopieren

var EventEmitter = require('events');var emitter = new EventEmitter();function show(){
    console.log(1);
}
emitter.on('test',show).on('test',show).removeListener('test',show);
emitter.emit('test');//'1'
Nach dem Login kopieren
Einstellungen

[emitter.eventNames()]

Gibt ein Array zurück, das die Ereignisse auflistet, für die der Trigger registrierte Listener hat. Die Werte im Array sind Zeichenfolgen oder Symbole
var EventEmitter = require('events');var emitter = new EventEmitter();function show1(){
    console.log(1);
    emitter.removeListener('test',show2);
}function show2(){
    console.log(2);
}
emitter.on('test',show1).on('test',show2);
emitter.emit('test');//1 2emitter.emit('test');//1
Nach dem Login kopieren

[emitter.listenerCount(eventName)]

Rückgabe to listening Die Anzahl der Zuhörer für das Ereignis namens eventName

var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.addListener('test1',function(){console.log(1);});
emitter.addListener('test2',function(){console.log(2);});
console.log(emitter.eventNames());//[ 'test1', 'test2' ]
Nach dem Login kopieren

[emitter.listeners(eventName)]

eventName <any> 正在被监听的事件名
Nach dem Login kopieren

Return name Eine Kopie des Listener-Arrays für eventName

var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.addListener('test',function(){console.log(1);});
emitter.addListener('test',function(){console.log(1);});
console.log(emitter.listenerCount('test'));//2
Nach dem Login kopieren

【emitter.getMaxListeners()】

  返回 EventEmitter 当前的最大监听器限制值

var EventEmitter = require('events');var emitter = new EventEmitter();
console.log(emitter.getMaxListeners());//10
Nach dem Login kopieren

【emitter.setMaxListeners(n)】

  默认情况下,如果为特定事件添加了超过 10 个监听器,则 EventEmitter 会打印一个警告。 此限制有助于寻找内存泄露。 但是,并不是所有的事件都要被限为 10 个。 emitter.setMaxListeners() 方法允许修改指定的 EventEmitter 实例的限制。 值设为 Infinity(或 0)表明不限制监听器的数量。返回一个 EventEmitter 引用,可以链式调用

var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){});/*Warning: Possible EventEmitter memory leak detected. 11 a listeners added. Use emitter.setMaxListeners() to increase limit */
Nach dem Login kopieren
var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.setMaxListeners(11);
emitter.on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){});
Nach dem Login kopieren

【EventEmitter.defaultMaxListeners】
  每个事件默认可以注册最多10个监听器。单个EventEmitter实例的限制可以使用emitter.setMaxListeners(n)方法改变。所有EventEmitter实例的默认值可以使用EventEmitter.defaultMaxListeners属性改变

  [注意]设置 EventEmitter.defaultMaxListeners 要谨慎,因为会影响所有EventEmitter 实例,包括之前创建的。因而,调用 emitter.setMaxListeners(n) 优先于 EventEmitter.defaultMaxListeners

var EventEmitter = require('events');var emitter = new EventEmitter();
EventEmitter.defaultMaxListeners = 11;
emitter.on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){}).on('a',function(){});
Nach dem Login kopieren

 

事件

【'newListener' 事件】

eventName <any> 要监听的事件的名称
listener  事件的句柄函数
Nach dem Login kopieren

  EventEmitter 实例会在一个监听器被添加到其内部监听器数组之前触发自身的 'newListener' 事件

  注册了 'newListener' 事件的监听器会传入事件名与被添加的监听器的引用。事实上,在添加监听器之前触发事件有一个微妙但重要的副作用: 'newListener' 回调中任何额外的被注册到相同名称的监听器会在监听器被添加之前被插入 

var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.on('newListener',function(){
    console.log(2);
})
emitter.on('test',function(){
    console.log(1);
})

emitter.emit('test');//2 1
Nach dem Login kopieren
var EventEmitter = require('events');var emitter = new EventEmitter();
emitter.on('test',function(){
    console.log(1);
})
emitter.on('newListener',function(){
    console.log(2);
})
emitter.emit('test');//1
Nach dem Login kopieren

【'removeListener' 事件】

eventName <any> 事件名
listener  事件句柄函数
Nach dem Login kopieren

  'removeListener' 事件在 listener 被移除后触发

var EventEmitter = require('events');var emitter = new EventEmitter();function show(){
    console.log(1);
}
emitter.on('removeListener',function(){
    console.log(2);//2})
emitter.on('test',show).removeListener('test',show);
Nach dem Login kopieren
var EventEmitter = require('events');var emitter = new EventEmitter();function show(){
    console.log(1);
}
emitter.on('test',show).removeListener('test',show);
emitter.on('removeListener',function(){
    console.log(2);//''})
Nach dem Login kopieren
var EventEmitter = require('events');var emitter = new EventEmitter();function show(){
    console.log(1);
}
emitter.removeListener('test',show);
emitter.on('removeListener',function(){
    console.log(2);//''})
Nach dem Login kopieren

 

Das obige ist der detaillierte Inhalt vonBeispiel-Tutorial zu Ereignissen in NodeJS-Ereignissen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Der Unterschied zwischen NodeJS und Tomcat Der Unterschied zwischen NodeJS und Tomcat Apr 21, 2024 am 04:16 AM

Die Hauptunterschiede zwischen Node.js und Tomcat sind: Laufzeit: Node.js basiert auf der JavaScript-Laufzeit, während Tomcat ein Java-Servlet-Container ist. E/A-Modell: Node.js verwendet ein asynchrones, nicht blockierendes Modell, während Tomcat synchrones Blockieren verwendet. Parallelitätsbehandlung: Node.js verarbeitet die Parallelität über eine Ereignisschleife, während Tomcat einen Thread-Pool verwendet. Anwendungsszenarien: Node.js eignet sich für Echtzeit-, datenintensive und Anwendungen mit hoher Parallelität, und Tomcat eignet sich für herkömmliche Java-Webanwendungen.

Der Unterschied zwischen NodeJS und VueJS Der Unterschied zwischen NodeJS und VueJS Apr 21, 2024 am 04:17 AM

Node.js ist eine serverseitige JavaScript-Laufzeitumgebung, während Vue.js ein clientseitiges JavaScript-Framework zum Erstellen interaktiver Benutzeroberflächen ist. Node.js wird für die serverseitige Entwicklung verwendet, beispielsweise für die Entwicklung von Back-End-Service-APIs und die Datenverarbeitung, während Vue.js für die clientseitige Entwicklung verwendet wird, beispielsweise für Single-Page-Anwendungen und reaktionsfähige Benutzeroberflächen.

Ist NodeJS ein Backend-Framework? Ist NodeJS ein Backend-Framework? Apr 21, 2024 am 05:09 AM

Node.js kann als Backend-Framework verwendet werden, da es Funktionen wie hohe Leistung, Skalierbarkeit, plattformübergreifende Unterstützung, ein umfangreiches Ökosystem und einfache Entwicklung bietet.

So verbinden Sie NodeJS mit der MySQL-Datenbank So verbinden Sie NodeJS mit der MySQL-Datenbank Apr 21, 2024 am 06:13 AM

Um eine Verbindung zu einer MySQL-Datenbank herzustellen, müssen Sie die folgenden Schritte ausführen: Installieren Sie den MySQL2-Treiber. Verwenden Sie mysql2.createConnection(), um ein Verbindungsobjekt zu erstellen, das die Hostadresse, den Port, den Benutzernamen, das Passwort und den Datenbanknamen enthält. Verwenden Sie „connection.query()“, um Abfragen durchzuführen. Verwenden Sie abschließend Connection.end(), um die Verbindung zu beenden.

Was ist der Unterschied zwischen den Dateien npm und npm.cmd im Installationsverzeichnis von nodejs? Was ist der Unterschied zwischen den Dateien npm und npm.cmd im Installationsverzeichnis von nodejs? Apr 21, 2024 am 05:18 AM

Es gibt zwei npm-bezogene Dateien im Node.js-Installationsverzeichnis: npm und npm.cmd. Die Unterschiede sind wie folgt: unterschiedliche Erweiterungen: npm ist eine ausführbare Datei und npm.cmd ist eine Befehlsfensterverknüpfung. Windows-Benutzer: npm.cmd kann über die Eingabeaufforderung verwendet werden, npm kann nur über die Befehlszeile ausgeführt werden. Kompatibilität: npm.cmd ist spezifisch für Windows-Systeme, npm ist plattformübergreifend verfügbar. Nutzungsempfehlungen: Windows-Benutzer verwenden npm.cmd, andere Betriebssysteme verwenden npm.

Was sind die globalen Variablen in NodeJS? Was sind die globalen Variablen in NodeJS? Apr 21, 2024 am 04:54 AM

Die folgenden globalen Variablen sind in Node.js vorhanden: Globales Objekt: global Kernmodul: Prozess, Konsole, erforderlich Laufzeitumgebungsvariablen: __dirname, __filename, __line, __column Konstanten: undefiniert, null, NaN, Infinity, -Infinity

Ist NodeJS eine Back-End-Entwicklungssprache? Ist NodeJS eine Back-End-Entwicklungssprache? Apr 21, 2024 am 05:09 AM

Ja, Node.js ist eine Backend-Entwicklungssprache. Es wird für die Back-End-Entwicklung verwendet, einschließlich der Handhabung serverseitiger Geschäftslogik, der Verwaltung von Datenbankverbindungen und der Bereitstellung von APIs.

Gibt es einen großen Unterschied zwischen NodeJS und Java? Gibt es einen großen Unterschied zwischen NodeJS und Java? Apr 21, 2024 am 06:12 AM

Die Hauptunterschiede zwischen Node.js und Java sind Design und Funktionen: Ereignisgesteuert vs. Thread-gesteuert: Node.js ist ereignisgesteuert und Java ist Thread-gesteuert. Single-Threaded vs. Multi-Threaded: Node.js verwendet eine Single-Threaded-Ereignisschleife und Java verwendet eine Multithread-Architektur. Laufzeitumgebung: Node.js läuft auf der V8-JavaScript-Engine, während Java auf der JVM läuft. Syntax: Node.js verwendet JavaScript-Syntax, während Java Java-Syntax verwendet. Zweck: Node.js eignet sich für I/O-intensive Aufgaben, während Java für große Unternehmensanwendungen geeignet ist.

See all articles