Einführung und Informationen
http://nodejs.org/api/events.html
http://www.infoq.com/cn/articles/tyq-nodejs-event
Ereignisse sind das wichtigste Modul von Node.js. Das Ereignismodul bietet nur ein Objektereignis. Eventemitter. Der Kern von EventEmitter ist Event Start and Event -Listener.
Die meisten Module in node.js werden aus dem Ereignismodul geerbt.
Im Gegensatz zu Ereignissen am DOM-Baum gibt es keine Aktivität wie sprudelndes, schicht-für-Schicht-Erfassung.
EventEmitter unterstützt mehrere Event -Hörer. Wenn eine Veranstaltung gestartet wird, wird der Ereignishörer in dieser Veranstaltung nacheinander aufgerufen, und die Ereignisparameter werden als Callback -Funktionsparameter übergeben.
Wie man zugreift:
Die Codekopie lautet wie folgt:
erfordern ('Ereignisse');
Emitter.on (Ereignis, Hörer)
Die Codekopie lautet wie folgt:
/*
Rufen Sie das Ereignismodul an, um Ereignisse zu erhalten. Eventemitter -Objekt
*/
var eventEmitter = required ('events'). eventEmitter;
var ee = new eventEmitter ();
/*
EventEmitter.on (Event, Listener) Registrieren Sie einen Hörer für die Veranstaltung
Parameter 1: Ereigniszeichenfolge, Ereignisname
Parameter 2: Rückruffunktion
*/
ee.on ('songents', function (foo, bar) {
console.log ("1. Hörereignis, Parameter foo =" + foo + ", bar =" + bar);
});
console.log ('erste Runde');
ee.emit ('einige_events', 'wilson', 'zhong');
console.log ('zweite Runde');
ee.emit ('einige_events', 'wilson', 'z');
EventEmitter.on (Event, Listener) Beispiel -Quellcode
Emitter.Emit (Ereignis, [arg1], [arg2], [...])
Die Codekopie lautet wie folgt:
var eventEmitter = required ('events'). eventEmitter;
var ee = new eventEmitter ();
ee.on ('songents', function (foo, bar) {
console.log ("1. Hörereignis, Parameter foo =" + foo + ", bar =" + bar);
});
/*
EventEmitter.Emit (Ereignis, [arg1], [arg2], [...]) löst das angegebene Ereignis aus
Parameter 1: Ereigniszeichenfolge, Ereignisname
Parameter 2: Übergeben Sie die Parameter der Rückruffunktion in der Reihenfolge
Rückgabewert: Ob dieses Ereignis angehört wird
*/
var issuccess = ee.emit ('songents', 'wilson', 'zhong');
ee.on ('songents', function (foo, bar) {
console.log ("2. Hörereignis, Parameter foo =" + foo + ", bar =" + bar);
});
ee.emit ('einige_events', 'zhong', 'wei');
var issuccess2 = ee.emit ('other_events', 'wilson', 'zhong');
console.log (issuccess);
console.log (issuccess2);
Emitter.Emit (Ereignis, [arg1], [arg2], [...]) Beispielquellencode
Das Beispiel hat drei Operationen für Auslöser von Ereignissen durchgeführt, bei denen einige_Events das Zuhören registriert, und die EMIT -Funktion gibt bei aufgerufenem True ein True zurück. Natürlich können Sie den Rückgabewert ignorieren!
Emitter.once (Ereignis, Hörer)
Die Codekopie lautet wie folgt:
var eventEmitter = required ('events'). eventEmitter;
var ee = new eventEmitter ();
/*
EventEmitter.Once (Event, Listener) Registrieren Sie das einmalige Hören nach Ereignis
Parameter 1: Ereigniszeichenfolge, Ereignisname
Parameter 2: Rückruffunktion
*/
ee.once ('songents', function (foo, bar) {
console.log ("1. Hörereignis, Parameter foo =" + foo + ", bar =" + bar);
});
console.log ('erste Runde');
ee.emit ('einige_events', 'wilson', 'zhong');
console.log ('zweite Runde');
var issuccess = ee.emit ('songents', 'wilson', 'zhong');
console.log (issuccess);
Emitter.Once (Ereignis, Listener) Beispiel -Quellcode
Aus den obigen Ergebnissen der Beispielcode -Ausführung können wir feststellen, dass nach der Registrierung eines Hörers für einige_Events mit Emitter.once in zwei Runden des Anlauf -Emitters die zweite Runde ausgelöst wird, und die zweite Runde wird falsch zurückgegeben. Dies bedeutet, dass die Registrierung des Hörers bei Emitter.
EMITTER.Art-Registrierung ist ein einmaliges Zuhören. Wenn einmal ausgelöst wird, wird das Hören entfernt! Natürlich geht es aus dem Namen ^_ ^!
Emitter.Removelistener (Event, Hörer)
Schauen wir uns zuerst eine fehlgeschlagene Szene an ~~~
Die Codekopie lautet wie folgt:
var eventEmitter = required ('events'). eventEmitter;
var ee = new eventEmitter ();
ee.on ('songents', function (foo, bar) {
console.log ("1. Hörereignis, Parameter foo =" + foo + ", bar =" + bar);
});
/*
Als ich die Entfernungsmethode für die Entfernung in der API sah, dachte ich, dass es so sein sollte
Aber das Ergebnis^_^!!!
*/
ee.removelistener ('songents', function () {
console.log ('erfolgreich entfernte Ereignis einige_Events zuhören!');
});
console.log ('erste Runde');
ee.emit ('einige_events', 'wilson', 'zhong');
Emitter.Removelistener (Ereignis, Listener) Beispielfehler Szenario Quellcode
Als ich einen Hörer für einige_Events mit Emitter.on registrierte, habe ich Emitter.Removelistener verwendet, um den Hörer von einigen_events zu entfernen, und rief dann Emitter.emit zum Trigger an. Schließlich stellte ich fest, dass es nicht so weiterging, wie ich es mir vorgestellt hatte! Warum?
Ich denke natürlich, dass der zweite Parameter von Emiiter.Removelistener eine Rückruffunktion ist, daher sollte die API sorgfältig gelesen werden! ! !
Lassen Sie uns eine weitere erfolgreiche Szene sehen ~~~
Die Codekopie lautet wie folgt:
var eventEmitter = required ('events'). eventEmitter;
var ee = new eventEmitter ();
var louser = function (foo, bar)
{
console.log ("1. Hörereignis, Parameter foo =" + foo + ", bar =" + bar);
}
var louser2 = function (foo, bar)
{
console.log ("2. Hörereignis, Parameter foo =" + foo + ", bar =" + bar);
}
var louser3 = function (foo, bar)
{
console.log ("3. Hörereignis, Parameter foo =" + foo + ", bar =" + bar);
}
ee.on ('einige_events', Hörer);
ee.on ('einige_events', Hörer2);
ee.on ('einige_events', Hörer3);
/*
EventEmitter.Removelistener (Event, Listener) entfernt den Hörer für das angegebene Ereignis
Hinweis: Der Hörer muss registriert sein
PS: Nach dem vorherigen Beispiel wird es fehlschlagen. Der große Grund ist, dass der Hörer ignoriert wird. Es ist natürlich zu glauben, dass es in Ordnung ist, den Ereignisnamen zu bestehen, also ist es eine Tragödie!
*/
ee.removelistener ('einige_events', Hörer);
ee.removelistener ('songents', louser3);
ee.emit ('einige_events', 'wilson', 'zhong');
Emitter.Removelistener (Event, Listener) Beispieler erfolgreicher Szenario -Quellcode
Ich habe die Beispiel -Schreibmethode verwendet, einige Hörer zu einigen_Events hinzugefügt, die ersten und dritten Hörer entfernt und schließlich einige_Events mit Emitter.Emit ausgelöst. Das Ausgabeergebnis ist nicht schwer zu ermitteln, dass der erste und dritte Hörer mit Emitter entfernt wurden. Removelistener funktionierte nicht mehr.
Natürlich ist es für Menschen schädlich. Es stellt sich heraus, dass der zweite Parameter von Emitter.
Emitter.Removealllisteners ([Event])
Emitter.Removelistener wurde verwendet, aber ein Ereignis kann mehrere Zuhörer haben. Wenn alle entfernt werden müssen, ist es offensichtlich keine angenehme Art, sie einzeln zu entfernen, und es entspricht nicht der Natur, faul zu sein!
Lassen Sie uns den Komfort von Emitter erleben. RemoveAlllisteners!
Die Codekopie lautet wie folgt:
var eventEmitter = required ('events'). eventEmitter;
var ee = new eventEmitter ();
var louser = function (foo, bar)
{
console.log ("1. Hörereignis, Parameter foo =" + foo + ", bar =" + bar);
}
var louser2 = function (foo, bar)
{
console.log ("2. Hörereignis, Parameter foo =" + foo + ", bar =" + bar);
}
ee.on ('einige_events', Hörer);
ee.on ('einige_events', Hörer2);
ee.on ('other_events', function (foo, bar)
{
console.log ("Andere Hörereignisse, Parameter foo =" + foo + ", bar =" + bar);
});
/*
EventEmitter.Removealllisteners ([Event]) entfernt (Batch -Event) alle Hörer
Parameter 1: Optionaler Parameter, Ereigniszeichenfolge, Ereignisname
*/
ee.removealllisteners ('einige_events');
ee.emit ('einige_events', 'wilson', 'zhong');
ee.emit ('other_events', 'wilson', 'zhong');
Emitter.RemoveAlllisteners Beispiel Quellcode für eingehende Ereignisname Parameter
Wenn Sie sich die obigen Ausführungsergebnisse ansehen, werden Sie feststellen, dass zwei Zuhörer für einige_Events registriert waren. Ein Zuhörer wurde für andere_Events registriert; Ich habe Emitter angerufen.
Verwenden Sie schließlich die Funktion emitter.on, um zwei Ereignisse auszulösen: einige_Events und andere_Events. Schließlich wird festgestellt, dass die beiden von einigen_events registrierten Zuhörern nicht existieren, während die von anderen registrierten Zuhörer immer noch existieren.
Dies bedeutet, dass bei Emitter.
Emitter.Removealllisteners können ohne Übergabe -Ereignisnamenparameter verwendet werden. direkt ausführen
Die Codekopie lautet wie folgt:
var eventEmitter = required ('events'). eventEmitter;
var ee = new eventEmitter ();
var louser = function (foo, bar)
{
console.log ("1. Hörereignis, Parameter foo =" + foo + ", bar =" + bar);
}
var louser2 = function (foo, bar)
{
console.log ("2. Hörereignis, Parameter foo =" + foo + ", bar =" + bar);
}
ee.on ('einige_events', Hörer);
ee.on ('einige_events', Hörer2);
ee.on ('other_events', function (foo, bar)
{
console.log ("Andere Hörereignisse, Parameter foo =" + foo + ", bar =" + bar);
});
/*
EventEmitter.Removealllisteners ([Event]) entfernt (Batch -Event) alle Hörer
Parameter 1: Optionaler Parameter, Ereigniszeichenfolge, Ereignisname
*/
ee.removealllisteners ();
ee.emit ('einige_events', 'wilson', 'zhong');
ee.emit ('other_events', 'wilson', 'zhong');
Emitter.RemoveAlllisteners Beispiel -Quellcode ohne Übergabe von Parametern
Der Beispielcode ist fast der gleiche wie bei der Übergabe von Parametern, außer dass beim Aufrufen von Emitter.removealllisteners kein angegebener Ereignisname übergeben wird.
Das Ausführen der Ergebnisse wird feststellen, dass einige Hörer nicht mehr existieren und alle Zuhörer entfernen! (Gewalttätigere Methoden sollten mit Vorsicht verwendet werden ~~)
Emitter.Listeners (Ereignis)
Die Codekopie lautet wie folgt:
var eventEmitter = required ('events'). eventEmitter;
var ee = new eventEmitter ();
var louser = function (foo, bar)
{
console.log ("1. Hörereignis, Parameter foo =" + foo + ", bar =" + bar);
}
var louser2 = function (foo, bar)
{
console.log ("2. Hörereignis, Parameter foo =" + foo + ", bar =" + bar);
}
ee.on ('einige_events', Hörer);
ee.on ('einige_events', Hörer2);
ee.on ('other_events', function (foo, bar)
{
console.log ("Andere Hörereignisse, Parameter foo =" + foo + ", bar =" + bar);
});
/*
Eventemitter.Listeners (Ereignis) // gibt das Hörarray für das angegebene Ereignis zurück
Parameter 1: Ereigniszeichenfolge, Ereignisname
*/
var höreneEventsarr = ee.listeners ('songents');
console.log (hörereventsarr.length)
für (var i = listeneEventsarr.length-1; i> = 0; i--) {
console.log (HöreneEventsarr [i]);
};
EMITTER.Listeners (Ereignis) Beispielquellcode
Registrieren Sie zwei Hörer für einige_Events, rufen Sie die Funktion emitter.listeners an, geben Sie einen Ereignisnamen ein und erhalten Sie den Funktionsrückgabewert.
Aus den Ergebnissen können wir erkennen, dass der Rückgabewert eine Sammlung aller registrierten Hörungen für einige_Events erhält!
Emitter.SetMaxListeners (n)
Es ist wahr, dass ein Ereignis mehrere Hörer hinzufügen kann, aber wie hoch ist der Standard -Maximalwert von NodeJs?
Die Codekopie lautet wie folgt:
var eventEmitter = required ('events'). eventEmitter;
var ee = new eventEmitter ();
/*
Fügen Sie 11 Hörer zu Eventemitter hinzu
*/
für (var i = 10; i> = 0; i--) {
ee.on ('songents', function ()
{
console.log ('th' +(i +1) +'Hörer');
});
};
Fügen Sie N -Hör -Beispiel -Quellcodes hinzu
Im obigen Beispiel habe ich eine Schleife verwendet, um 11 zuzuhören, einige_Events zu hören, den Code auszuführen, und stellte fest, dass die Warninformationen angezeigt wurden und die Eingabeaufforderung detaillierter war. Daher muss ich Emitter.SetMaxListeners () verwenden, um das Grenzwert zu erhöhen.
Die Codekopie lautet wie folgt:
var eventEmitter = required ('events'). eventEmitter;
var ee = new eventEmitter ();
/*
Eventemitter.SetMaxListeners (N) Setzen Sie das maximale Hören für EventEmitter
Parameter 1: N -Zahlen -Typ, maximale Anzahl von Hörern
Wenn es mehr als 10 Hörer gibt, wird die maximale Anzahl von Hörern für EventEmitter aufgefordert:
(Knoten) WARNUNG: Mögliches Ereignisemitt -Speicher -Leck erkannt. 11 Zuhörer fügten hinzu.
Verwenden Sie Emitter.SetMaxListeners (), um die Grenze zu erhöhen.
Der Designer glaubt, dass zu viele Zuhörer zu Speicherlecks führen können, daher gibt es eine solche Warnung
*/
ee.setMaxListeners (15);
/*
Fügen Sie 11 Hörer zu Eventemitter hinzu
*/
für (var i = 10; i> = 0; i--) {
ee.on ('songents', function ()
{
console.log ('th' +(i +1) +'Hörer');
});
};
Emitter.SetMaxListeners Beispiel -Quellcode
Wenn ich Emitter.SetMaxListener anrufe, um 15 zu bestehen, wird der Code ausgeführt und die Warninformationen werden nicht mehr angezeigt.
Die Funktion von Emitter.SetMaxListeners besteht darin, die maximale Anzahl von Hörern für EventEmitter festzulegen. Es fühlt sich an, als müssten Sie diesen Wert nicht festlegen. Es sollte weniger Fälle geben, in denen 10 nicht genug sind!
Der Designer dachte, dass zu viele Zuhörer Speicherlecks verursachen würden, also warnte er eine Warnung!
andere...
Ich werde nicht in Details eingehen, wenn ich weniger benutze
EventEmitter.DefaultMaxListeners
EventEmitter.DefaultMaxListeners -Funktion ähnelt SetMaxListeners.
Setzen Sie das maximale Hören für alle Eventemitterer
Die Priorität von SetMaxListeners ist größer als defaultMaxListener
Eventemitter.ListenCount (Emitter, Ereignis)
Gibt die Anzahl der Hörer für das angegebene Ereignis zurück
Spezialereignisfehler
Zitat aus Node.js Development Guide: EventEmitter definiert einen speziellen Ereignisfehler, der die Semantik von "Fehler" enthält. Wir geben normalerweise ein Fehlerereignis aus, wenn wir Ausnahmen begegnen. Wenn ein Fehler emittiert wird, gibt EventEmitter an, dass Node.js, wenn es keinen Antworthörer gibt, als Ausnahme behandelt wird, das Programm beenden und den Anrufstapel drucken. Wir müssen im Allgemeinen Hörer für Objekte einrichten, die Fehlerereignisse abgeben, um das gesamte Programm nach dem Absturz nach Begegnungen zu vermeiden.
Erbschaft von Ereignissen
Reden wir später in Util darüber. Wenn Sie interessiert sind, können Sie es sich selbst ansehen.