目次
模擬イベント
Node.js
のコア
APIの多く
は、特定のタイプのオブジェクト (
「トリガー」
と呼ばれる) が
名前付きイベントを起動し、関数オブジェクト(「リスナー」) デバイス」)が呼び出される慣用的な非同期イベント駆動型アーキテクチャを中心に構築されています。
nodejs でのイベント駆動は、トリガーで API を使用することによって実現され、
EventEmitter はトリガーです。
let EventEmitter = require('events')
console.log(EventEmitter);
EventEmitter は結果を出力します:
EventEmitter がクラスまたはコンストラクターであることがわかります。その内部 EventEmitter は EventEmitter と同じです。つまり、次のとおりです。
console.log(EventEmitter.EventEmitter === EventEmitter); //true
EventEmitter を分解して、名前を temp に変更できます。
let {EventEmitter:temp} = require('events')
console.log(temp);
EventEmitter インスタンスを作成し、インスタンスを介して EventEmitter のメソッドを呼び出すことができます。
let EventEmitter = require('events')
// 创建一个EventEmitter实例
let emitter = new EventEmitter()
// 调用EventEmitter中的on方法
emitter.on('event',()=>{
console.log('event');
})
// 触发事件
emitter.emit('event')
API
イベント登録:
エミッター.オン(イベント名、リスナー)
エミッター.addListener(イベント名、リスナー)エミッター.once(イベント名、リスナー)イベント エミッター: (イベント エミッターを使用してイベントをトリガーする)エミッター.emit(イベント名[,パラメーター,パラメーター])トリガーがリスナーを登録したイベントをリストする配列を返します。エミッター.eventNames()eventName という名前のイベントのリスナーの配列のコピーを返します。エミッター.リスナー(イベント名)イベントのアンバンドリング:エミッター.オフ(イベント名、リスナー)エミッター.removeListener(イベント名、リスナー)エミッター.removeAllListeners([イベント名])
イベント登録
イベント登録には、on、addListener、および once メソッドを使用できます。これらにはすべて 2 つのパラメータがあります。最初のパラメータはイベント名を示し、2 番目のパラメータはイベント ハンドラを示します。パラメータをイベント ハンドラに渡すことができます。
on メソッドを使用して、イベントを複数回登録できます。
イベントの登録にはonce メソッドを使用します。イベントは呼び出されると破棄されます。
let EventEmitter = require('events');
// 声明发射器
let emitter = new EventEmitter();
// 注册事件 on
emitter.on('event',(params)=>{
console.log('event',params)
});
emitter.on('event',(params)=>{
console.log('另一个event',params)
});
// 注册事件 方式 addListener 参数:事件名称 事件处理程序
emitter.addListener('event1',(params)=>{
console.log('event1',params);
});
emitter.addListener('event2',(params)=>{
console.log('event2',params);
});
// 注册事件 once 一次绑定 触发完解绑
emitter.once('event3',(params)=>{
console.log('event3',params);
});
console.log(emitter.eventNames(),'触发事件之前');
// 触发事件
emitter.emit('event',100);
emitter.emit('event1',100);
emitter.emit('event2',100);
emitter.emit('event3',100);
// 返回已经注册事件的数组
console.log(emitter.eventNames(),'触发事件之后');
// 返回事件的事件监听器
console.log(emitter.listeners('event'));
結果は次のとおりです。
イベントのアンバンドリング
イベントのバインド解除では、off、removeListener、removeAllListeners メソッドを使用できます。
一度にすべてのイベントのバインドを解除するには、removeAllListeners を使用します。
let EventEmitter = require('events');
let emitter = new EventEmitter();
// 注册事件
function handler(params){
console.log(params+'event')
}
function handler1(params){
console.log(params+'另一个event')
}
emitter.on('event',handler);
emitter.on('event',handler1);
// 返回事件的事件监听器组成数组的副本
console.log(emitter.listeners('event'));
// 解绑事件
// emitter.off('event',handler);
// emitter.removeListener('event',handler1);
// 一次性解绑全部事件监听器 事件名称
emitter.removeAllListeners('event');
console.log(emitter.listeners('event'));//[]