序文最近、卸売商品の需要があり、さまざまな商人に対応する卸売商品を選択し、元のインターフェースに表示する必要があります。プロジェクトのコードは会社にとって古いレベルであるため(この種のコードはプログラマーにとって厄介なものです)、問題を解決する際には非常に慎重になります。この問題を回避し、外部依存性を減らすには、イベントディスパッチ関数を手動でカプセル化します。 1. 何ですかNode はイベント駆動メカニズムを使用しており、EventEmitter は Node がイベント駆動を実装するための基礎となっています。EventEmitter に基づいて、Node のほぼすべてのモジュールがこのクラスを継承します。これらのモジュールには独自のイベントがあり、リスナーをバインド/トリガーして非同期操作を実装できます。 2. Node.jsでEventEmitterを使用する方法Node のイベント モジュールは、Node の非同期イベント駆動型アーキテクチャの基本パターンであるオブザーバー パターンを実装する EventEmitter クラスのみを提供します。このパターンでは、監視対象 (サブジェクト) は、他のオブジェクトによって送信 (登録) されたオブザーバーのグループを維持します。新しいオブジェクトがサブジェクトに関心がある場合は、オブザーバーを登録し、関心がない場合は登録を解除します。サブジェクトが更新されると、オブザーバーに通知が送信されます。 const EventEmitter = require('events') クラス MyEmitter は EventEmitter を拡張します {} 定数 myEmitter = 新しい MyEmitter() 関数コールバック() { console.log('イベントがトリガーされました!') } myEmitter.on('イベント'、コールバック) myEmitter.emit('イベント') myEmitter.removeListener('イベント'、コールバック); 3. 実施プロセス基本的なコードは次のとおりです。 //イベントディスパッチメカニズム(function() { var イベントディスパッチャー = 関数() { var イベントディスパッチャークロージャ = 関数() { }; イベントディスパッチャークロージャ.プロトタイプ = { /** * イベントを登録 * @param {Object} キー * @param {オブジェクト} fn */ オン: 関数(キー, fn) { //現在のイベント オブジェクトを取得します。var curEvents = this._getCurEvents(key); //まずイベントが登録されているかどうかを確認します var flag = false; (var i = 0, len = curEvents.length; i < len; i++) { もしcurEvents[i].name == fn.nameであれば{ //すでに登場していますが、最後に登録された関数はメイン flag = true です。 curEvents[i] = fn; 壊す; } } if (!フラグ) { curEvents[curEvents.length] = fn; } this._register(キー、curEvents); }, /** * イベントのディスパッチ * @param {Object} キー * @param {オブジェクト} データ */ ディスパッチ: 関数(キー) { //現在のイベント オブジェクトを取得します。var curEvents = this._getCurEvents(key); var shouldDispatch = true; (var i = 0, len = curEvents.length; shouldDispatch && i < len; i++) { 試す { //パラメータを取得する var args = []; (var j = 1, len1 = arguments.length; j < len1; j++) { args.push(引数[j]); } shouldDispatch = curEvents[i].apply({}, args); } キャッチ (e) { ディスパッチ = false である必要があります。 } } shouldDispatch を返します。 }, 削除: 関数(キー) { if (this._getCurEvents(キー)) { EventDispatcherClosure.events[キー]を削除します。 } }, /** * キーに基づいてイベントリストを取得します * @param {Object} key */ _getCurEvents: 関数(キー) { EventDispatcherClosure.events[key] || [] を返します。 }, /** * 登録時間* @param {Object} キー * @param {Object} イベント */ _register: 関数(キー、イベント) { EventDispatcherClosure.events[キー] = events; }, }; イベントディスパッチャークロージャ.イベント = {}; 戻る { 作成: 関数() { 新しいEventDispatcherClosure()を返します。 } }; }; window.EventDispatcher = 新しい EventDispatcher().create(); })(); まず、グローバル変数の匿名関数を定義し、開発プロセス中に呼び出せるように、グローバル変数をウィンドウに表示します。匿名関数のプロトタイプ チェーンに、イベント配布、イベント監視、イベント削除などのメソッドを追加します。 イベントディスパッチコール EventDispatcher.dispatch("テスト", obj) イベントリスニング EventDispatcher.on("test", 関数コールバック(obj) { }) イベントの削除 EventDispatcher.on("テスト") コードのカプセル化は比較的シンプルです これで、Node.js で EventEmitter の実装をカスタマイズする方法についての記事は終了です。Node.js で EventEmitter を実装する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Linux サーバー上のローカル静的リソースにアクセスするために nginx を使用する方法
>>: MySQL クエリ フィールド タイプが json の場合の 2 つのクエリ メソッド
この記事の例では、衝突検出を実装するためのjsの具体的なコードを参考までに共有しています。具体的な内...
背景まず、背景を説明します。ある制約により、当社の現在のバックアップ戦略では、1 日おきにフル バッ...
目次1. JavaScriptの基礎2. 基本的なJavaScript構文3. JavaScript...
CSS3お願いしますこのウェブサイトを自分で見て、パラメータを変更し、CSS3効果をオン/オフにする...
必要ユーザーがフォームに入力して「保存」をクリックすると、PDF ドキュメントを直接ダウンロードでき...
ここでは、PHP、JSP、または .NET 環境については説明しません。アーキテクチャの観点から問題...
この記事では、Vueカスタムツリーコントロールの使い方を参考までに紹介します。具体的な内容は次のとお...
この問題に関して、オンライン リソースをたくさん見つけました。ここにいくつかの方法を示します。コード...
この記事では、参考までに、Navicatを使用してCSVファイルをMySQLにインポートするための具...
目次1. 監視プロパティを監視する1. ショッピングカート2. すべて選択し、すべて選択解除する2....
テーブル構造とそのデータをコピーする次のステートメントは、データを新しいテーブルにコピーします。注:...
結果 (完全なコードは下部にあります): 実装は難しくありませんが、繰り返しコードが多くなります。実...
目次序文異なるコンピュータ上の 2 つの Node.js プロセス間の通信TCPソケットの使用HTT...
プロジェクト ページの作成中に、子要素が親要素の透明度を継承するという問題に遭遇しました。多くのドキ...
Dockerコンテナの状態遷移図2度目の実戦 [root@localhost ~]# docker ...