この記事では、Node.jsのイベント モジュールを理解し、イベントのパブリッシュおよびサブスクライブ モデルを紹介します。皆様のお役に立てれば幸いです。
参考公式 Web サイト: events イベント トリガー | Node.js
http ://nodejs.cn/api/events.html
Events
モジュールは Node の最も重要なモジュールであり、属性EventEmitter
,# を提供します##EventEmitterの中核は、イベントの発行とイベント リスナーです。
Nodeのモジュールのほとんどは、Eventsモジュールから継承します。
モジュールは、Node の
パブリッシュ/サブスクライブ モード(パブリッシュ/サブスクライブ) の実装です。 1 つのオブジェクトがこのモジュールを通じて別のオブジェクトにメッセージを渡します。
属性を通じてコンストラクターを提供します。このコンストラクターのインスタンスには、指定されたイベントをリッスンし、コールバック関数をトリガーするために使用できる
onメソッドがあります。
インスタンスの on メソッドによって監視されます。
パブリッシュおよびサブスクライブ モデルについては、以前のブログ記事を参照してください。
Eventsのパブリッシュおよびサブスクライブ モデルに関しては、まずその一般的なメソッドのいくつかを理解する必要があります。
メソッドは、イベントをサブスクライブするために使用されます。サブスクリプションは、メソッドを 1 対多の関係にマップします。
サブスクライブされたイベントを実行するために使用されます。
メソッドは、対応するイベント リスナーを削除できます。
バインドされたイベントは、実行後にサブスクライブされたイベントを自動的に削除します。
onメソッドの最初のパラメータはクラス名を設定するために使用され、2 番目のパラメータは公開時に渡されるパラメータを受け取ることができる関数でもあります。
emitメソッドの最初のパラメータはクラス名で、後続のパラメータは
onメソッド関数に渡されるパラメータです。
onおよび
emit特定のアプリケーションについては、以下の簡単なデモを参照してください。
const EventEmitter = require('events'); // 自定义一个 构造函数 function Cat() {} // 原型继承 需要通过实例来调用继承方法 Object.setPrototypeOf(Cat.prototype, EventEmitter.prototype); let cat = new Cat(); const sleep = (a, b) => { console.log(a, '睡'); }; const eat = (a, b) => { console.log(b, '吃'); }; cat.on('猫咪', sleep) cat.on('猫咪', eat) setTimeout(() => { // 小胡子 吃 // 小胖仙 睡 cat.emit('猫咪', '小胖仙', '小胡子') }, 1000);
onメソッドと
emitメソッドのセットを実装できます。
function EventEmitter() { this._event = {} } // on 方法 EventEmitter.prototype.on = function (eventName, callBack) { if (!this._event) { this._event = {} } if (this._event[eventName]) { this._event[eventName].push(callBack) // 相当于 {eventName:[fn1,fn2]} } else { this._event[eventName] = [callBack]; // 相当于 {eventName:[fn1]} } } // emit 方法 EventEmitter.prototype.emit = function (eventName, ...args) { this._event[eventName].forEach(fn => { fn(...args) }); }
offメソッドの最初のパラメータはクラス名を設定するために使用され、渡される 2 番目のパラメータは次のように指定する必要があります。関数コールバックを削除しました。
// ... setTimeout(() => { // 小胡子 吃 // 小胖仙 睡 cat.emit('猫咪', '小胖仙', '小胡子') cat.off('猫咪', sleep); // 小胡子 吃 cat.emit('猫咪', '小胖仙', '小胡子') }, 1000);
filterメソッドです。
// off 方法 EventEmitter.prototype.off = function (eventName, callBack) { if (this._event && this._event[eventName]) { this._event[eventName] = this._event[eventName].filter( fn => fn !== callBack && fn.c !== callBack // fn.c参考下面的once方法实现 ) } }
onceメソッドの最初のパラメータはクラス名を設定するために使用されます。2 番目のパラメータは渡され、必要なのは一度実行される関数コールバック。
// ... const demolition =() => { console.log('拆家'); } cat.once('猫咪', demolition) setTimeout(() => { // ...... 拆家 cat.emit('猫咪', '小胖仙', '小胡子') }, 1000);
onと
offに基づいてこのメソッドを実装できます。
// once 方法 EventEmitter.prototype.once = function (eventName, callBack) { const one = () => { callBack(); this.off(eventName, one); } this.on(eventName, one); }
onceメソッドを実行する前に
offメソッドを通じて削除した場合です。
onceメソッド
にいくつかの変更を加える必要があります (offメソッドはすでに処理されています) )
。
EventEmitter.prototype.once = function (eventName, callBack) { const one = () => { // ... } one.c = callBack; // 自定义一个属性 // ... }
onceメソッドを実装しました。
nodejs チュートリアルを参照してください。 !
以上がNode.js のイベント モジュールについての学習とチャットの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。