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