W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Node.js自帶了對核心events模塊中的events的內(nèi)置支持。
使用require("events")加載模塊。
events模塊有一個簡單的類“EventEmitter”。
EventEmitter是一個類,旨在使其易于發(fā)出events和訂閱引發(fā)的events。
以下代碼提供了一個小代碼示例,其中我們訂閱了一個事件,然后引發(fā)它。
var EventEmitter = require("events").EventEmitter;
var emitter = new EventEmitter();
// Subscribe
emitter.on("foo", function (arg1, arg2) {
console.log("Foo raised, Args:", arg1, arg2);
});
// Emit
emitter.emit("foo", { a: 123 }, { b: 456 });
我們可以用一個簡單的 new EventEmitter
調(diào)用創(chuàng)建一個新的實例。
要訂閱events,請使用事件名稱中的 on
函數(shù)傳遞,后面跟隨事件處理函數(shù)。
最后,我們使用 emit
函數(shù)引發(fā)一個事件,傳遞跟隨有任意數(shù)量我們想傳遞給監(jiān)聽器的參數(shù)的事件名稱。
以下代碼顯示了如何為一個事件擁有多個訂閱者。
var EventEmitter = require("events").EventEmitter;
var emitter = new EventEmitter();
//from m.o2fo.com
emitter.on("foo", function () {
console.log("subscriber 1");
});
emitter.on("foo", function () {
console.log("subscriber 2");
});
// Emit
emitter.emit("foo");
上面的代碼生成以下結(jié)果。
監(jiān)聽器按它們?yōu)槭录缘捻樞蛘{(diào)用。
為事件傳入的任何參數(shù)在各個訂閱者之間共享。
var EventEmitter = require("events").EventEmitter;
var emitter = new EventEmitter();
// m.o2fo.com
emitter.on("foo", function (ev) {
console.log("subscriber 1:", ev);
ev.handled = true;
});
emitter.on("foo", function (ev) {
if (ev.handled) {
console.log("event already handled");
}
});
// Emit
emitter.emit("foo", {handled: false });
在此示例中,第一個監(jiān)聽器修改了傳遞的事件參數(shù),第二個監(jiān)聽器獲取了修改的對象。
EventEmitter有一個removeListener函數(shù),它接收一個跟隨函數(shù)對象的事件名稱從偵聽隊列中進行刪除。
我們必須有一個對你想從監(jiān)聽隊列中刪除的函數(shù)的引用。
以下代碼顯示如何取消訂閱監(jiān)聽器。
var EventEmitter = require("events").EventEmitter;
var emitter = new EventEmitter();
//from m.o2fo.com
var fooHandler = function () {
console.log("handler called");
// Unsubscribe
emitter.removeListener("foo",fooHandler);
};
emitter.on("foo", fooHandler);
// Emit twice
emitter.emit("foo");
emitter.emit("foo");
在此示例中,我們在引發(fā)一次后取消訂閱事件。結(jié)果,第二事件不被注意。
EventEmitter提供了僅一次調(diào)用已注冊監(jiān)聽器“once”的函數(shù)。
var EventEmitter = require("events").EventEmitter;
var emitter = new EventEmitter();
/*m.o2fo.com*/
emitter.once("foo", function () {
console.log("foo has been raised");
});
// Emit twice
emitter.emit("foo");
emitter.emit("foo");
foo的事件監(jiān)聽器將只被調(diào)用一次。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: