nodejs イベント駆動 - シミュレートされたイベント

目次

模擬イベント

API

イベント登録

イベントのアンバンドリング


模擬イベント

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'));//[]

おすすめ

転載: blog.csdn.net/lq313131/article/details/127619195