?
This document uses PHP Chinese website manual Release
文檔: 4 - API 凍結(jié)
Node 里很多對象會分發(fā)事件: 每次有連接的時候 net.Server
會分發(fā)事件,當(dāng)文件打開的時候 fs.readStream
會分發(fā)事件。所有能分發(fā)事件的對象都是 events.EventEmitter
的實例。通過 require("events");
能訪問這個模塊。
一般來說,事件名都遵照駝峰規(guī)則,但這不是強制規(guī)定,任何形式的字符串都可以做為事件名。
為了處理事件,通常將函數(shù)關(guān)聯(lián)到對象上。這些函數(shù)也叫監(jiān)聽者(listeners)。在這個函數(shù)里,this
指向 監(jiān)聽者所關(guān)聯(lián)的 EventEmitter
。
通過 require('events').EventEmitter
獲取 EventEmitter 類。
EventEmitter
實例遇到錯誤后,通常會觸發(fā)一個錯誤事件。錯誤事件在 node 里是特殊例子。如果沒有監(jiān)聽者,默認的操作是打印一個堆棧信息并退出程序。
當(dāng)添加新的監(jiān)聽者時, EventEmitters 會觸發(fā)'newListener'
事件,當(dāng)移除時會觸發(fā)'removeListener'
。
添加一個監(jiān)聽者到特定 event
的監(jiān)聽數(shù)組的尾部,觸發(fā)器不會檢查是否已經(jīng)添加過這個監(jiān)聽者。 多次調(diào)用相同的 event
和 listener
將會導(dǎo)致 listener
添加多次。
server.on('connection', function (stream) { console.log('someone connected!'); });
返回 emitter。
給事件添加一個一次性的 listener,這個 listener 只會被觸發(fā)一次,之后就會被移除。
server.once('connection', function (stream) { console.log('Ah, we have our first user!'); });
返回emitter。
從一個某個事件的 listener 數(shù)組中移除一個 listener。注意,這個操作會改變 listener 數(shù)組內(nèi)容的次序。
var callback = function(stream) { console.log('someone connected!'); }; server.on('connection', callback); // ... server.removeListener('connection', callback);
removeListener
最多會移除數(shù)組里的一個 listener。如果多次添加同一個 listener 到數(shù)組,那就需要多次調(diào)用 removeListener
來移除每一個實例。
返回emitter。
移除所有的 listener,或者某個事件的 listener。最好不要移除全部 listener,尤其是那些不是你傳入的(比如 socket 或 文件流)。
返回emitter。
默認情況下,給單個事件添加超過 10 個 listener ,事件分發(fā)器會打印警告。這樣有利于檢查內(nèi)存泄露。不過不是所有的分發(fā)器都應(yīng)該限制在 10 個,這個函數(shù)允許改變 listener 數(shù)量,無論是 0 還是更多。
返回emitter。
emitter.setMaxListeners(n)
設(shè)置一個分發(fā)器的最大 listener 數(shù),而這個函數(shù)會立即設(shè)置所有EventEmitter
的當(dāng)前值和默認值。要小心使用。
請注意, emitter.setMaxListeners(n)
的優(yōu)先級高于 EventEmitter.defaultMaxListeners
.
返回事件的 listener 數(shù)組。
server.on('connection', function (stream) { console.log('someone connected!'); }); console.log(util.inspect(server.listeners('connection'))); // [ [Function] ]
使用指定的參數(shù)順序的執(zhí)行每一個 listener.
如果事件有 listener,返回 true
, 否則 false
返回指定事件的 listener 數(shù)量。
event
{String} 事件名
listener
{Function} 事件處理函數(shù)
添加 listener 的時候會觸發(fā)這個事件。當(dāng)這個事件觸發(fā)的時候,listener 可能還沒添加到 listener 數(shù)組。
event
{String} 事件名
listener
{Function} 事件處理函數(shù)
刪除 listener 的時候會觸發(fā)這個事件。當(dāng)這個事件觸發(fā)的時候,listener 可能還還沒從 listener 數(shù)組移除。