關於EventEmitter的用法


1 var EventEmitter = require("events").EventEmitter;
2 var ee = new EventEmitter();
3 ee.on("someEvent", function () {
4     console.log("event has occured");
5 });
6  
7 ee.emit("someEvent");

emit方法可以觸發多個同樣的事件,比如我們的頁面中綁定了多個同樣的someEven事件。

ee.on("someEvent", function () { console.log("event 1"); });
ee.on("someEvent", function () { console.log("event 2"); });
ee.on("someEvent", function () { console.log("event 3"); });
ee.on("someEvent", function () { console.log("event 4"); });
ee.on("someEvent", function () { console.log("event 5"); });
ee.on("someEvent", function () { console.log("event 6"); });
ee.on("someEvent", function () { console.log("event 7"); });
ee.on("someEvent", function () { console.log("event 8"); });
ee.on("someEvent", function () { console.log("event 9"); });
ee.on("someEvent", function () { console.log("event 10"); });
ee.on("someEvent", function () { console.log("event 11"); });
 
ee.emit("someEvent");

上面綁定的11個someEvent事件都會觸發,但是控制台會有一條警告,因為事件對象默認監聽的事件數量是10個,我們可以通過代碼設置改變這個數值,例如:

1 ee.setMaxListeners(20);

事件對象還有其他方法:

1,once()監聽一次

2,removeListener , removeAllListeners() 移除監聽事件/移除所有監聽的事件

比如在UserList.js文件中有UserList類

 1 var util         = require("util");
 2 var EventEmitter = require("events").EventEmitter;
 3 
 4 var id = 1;
 5 var database = {
 6     users: [
 7         { id: id++, name: "Joe Smith",  occupation: "developer"    },
 8         { id: id++, name: "Jane Doe",   occupation: "data analyst" },
 9         { id: id++, name: "John Henry", occupation: "designer"     }
10     ]
11 };
12 
13 util.inherits(UserList, EventEmitter);
14 /*或者這樣
15 function UserList () {
16     EventEmitter.call(this);
17 }*/
18 
19 UserList.prototype.save = function (obj) {
20     obj.id = id++;
21     database.users.push(obj);
22     this.emit("saved-user", obj);  
23 };
24 
25 UserList.prototype.all = function () {
26     return database.users;
27 };
28  
29 module.exports = UserList

 

現在我們可以在另外一個文件中這樣寫:

1 var UserList = require("./userlist");
2 var users = new UserList();
3  
4 users.on("saved-user", function (user) {
5     console.log("saved: " + user.name + " (" + user.id + ")");
6 });
7  
8 users.save({ name: "Jane Doe", occupation: "manager" });
9 users.save({ name: "John Jacob", occupation: "developer" });
1 //輸出結果
2 saved: Jane Doe (4)
3 saved: John Jacob (5)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM