js シンプルで粗雑なパブリッシュとサブスクライブのサンプルコード

js シンプルで粗雑なパブリッシュとサブスクライブのサンプルコード

パブリッシュ/サブスクライブとは何ですか?

例を挙げてみましょう。あなたは服を買うために店に行きます。あなたと店長はお互いを知りません。店長は自分の服を売るだけで、誰が買うかは気にしません。あなたは欲しい服を買うだけで、どの店が売っているかは気にしません。この時点で、店とあなたはパブリッシュ/サブスクライブの関係を形成します。

店に服のスタイルが並べられたら、欲しい服を探しに行きます。見つかったら買います。見つからなければ、店を出ます。プロセス全体はそれほど簡単です。

使用シナリオ

非同期通信、複数のページ間の通信、ページAのメソッドはページBのメソッドが呼び出されたときに特定の時間にトリガーされる必要がある

コードに直接

クラス Publish {
 コンストラクタ() {
  このリストマップは {} です。
 }
	// サブスクライブ on(key, fn) {
  this.listMap[キー]
   ? this.listMap[キー].push(fn)
   : this.listMap[キー] = [fn];
   
		// サブスクリプションの添字を保存します fn const index = this.listMap[key].length - 1;
  
		// 購読解除関数を返す
  return () => this.clear(key, index);
 }
 
	// このキーへのすべてのサブスクリプションをキャンセルします off(key) {
  this.listMap[キー]を削除します。
 }
 
	// キーで指定されたサブスクリプションをキャンセルする clear(key, index) {
  インデックス === this.listMap[キー].長さ - 1
   ? this.listMap[キー].pop()
   : this.listMap[キー][インデックス] = null;
 }
 
	//一度購読し、トリガー後に自動的に購読を解除する once(key, fn) {
  this.on(キー、(...残り) => {
   fn(...残り);
   this.off(キー);
  });
 }

	// キーを公開
 トリガー(キー、...残り) {
 	if(this.listMapのキー) {
	 	this.listMap[キー].forEach(fn => {
	   fn(...残り);
	  });
 	}
 }
}

使い方

ob = new Publish();

//サブ1を購読する
定数sub1 = ob.on('sub1', (a, b) => {
 コンソールにログ出力します。
});

//サブ1を購読する
定数sub11 = ob.on('sub1', (a, b) => {
 コンソールにログ出力します。
});

ob.trigger('sub1', 2, 3);

// サブ1 から登録解除
サブ1();

// サブ11 から登録解除
サブ11();

//sub3 を購読する
ob.on('sub3', (a, b) => {
 コンソールにログ出力します。
});

//sub3 を購読する
ob.on('sub3', (a, b) => {
 コンソールにログ出力します。
});

ob.trigger('sub3', 6, 7);

// すべてのサブ3から登録解除
ob.off('sub3');

// 一度購読し、自動的に購読解除する ob.once('sub4', (a, b) => {
 コンソールにログ出力します。
});

ob.trigger('sub4', 8, 9);

要約する

js のシンプルで粗雑な公開と購読に関するこの記事はこれで終わりです。より関連性の高い js のシンプルな公開と購読のコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • JavaScript デザイン パターン: オブザーバー パターン (パブリッシャー サブスクライバー パターン)
  • シンプルなサブスクライバーモードとパブリッシャーモードの完全な例の JS モード
  • JavaScript でのパブリッシュ/サブスクライブパターンの簡単な例
  • JavaScript イベント公開/購読モデルの原理と使用法の分析
  • JavaScript の実装とパブリッシュ/サブスクライブ モードの使用に関する詳細な説明
  • js パブリッシュ・サブスクライブモードの例の説明
  • js で実装されたサブスクリプション パブリッシャー モードの簡単な例
  • JavaScript デザインパターン オブザーバーモード(パブリッシュ アンド サブスクライブモード)の原理と実装方法の例
  • [JS マスターロード] デザインパターンシリーズコース - パブリッシャーとサブスクライバーの例 ショッピングカートのリファクタリング
  • js デザイン パターンにおけるプロキシ モードとサブスクリプション パブリッシング モードの詳細な例

<<:  Dockerのインストール方法とDockerの4つのネットワークモードの詳細説明

>>:  MySQL 5.7.10 インストール ドキュメント チュートリアル

推薦する

MySQL 5.6.22 のインストールと設定方法のグラフィックチュートリアル

このチュートリアルでは、MySQL5.6.22のインストールと設定方法の具体的なコードを参考までに共...

Vue の高度な使用方法チュートリアル 動的コンポーネント

目次基本的な説明AST 解析レンダリング機能通常コンポーネントと動的コンポーネントの比較ファクトリ関...

JavaScript のガベージコレクションの仕組みの詳細な説明

目次ガベージコレクション (GC) はなぜ必要なのでしょうか?ガベージコレクションとは廃棄物の発生ガ...

Mysqlはフィールドスプライシングのための3つの関数を実装している

データをオペレーションにエクスポートする場合、フィールドの結合は避けられません。MySQL でこれが...

dockerでpdflatex環境を設定する方法

技術的背景Latex は文書作成、特に記事作成には欠かせないツールであり、必須のテキスト組版ツールで...

Typescript の as、疑問符、感嘆符の詳細な説明

1. asキーワードはアサーションを示すTypescript では、アサーションを表現する方法が 2...

docker に基づいて nginxssl 設定を開始する

前提条件クラウドサーバー(Alibaba Cloud、Tencent CloudなどのcentOS)...

HTML マーキータグの使用例

このタグはHTML3.2の一部ではなく、MSIE3以降のカーネルのみをサポートしています。そのため、...

JS で Websocket ベースのマルチターミナル ブリッジング プラットフォームを実装する方法

目次1. デバッグ対象2. WebSocketの機能3. ソケット接続を確立する3.1 部屋の作成方...

MySQL 8.0.20 winx64 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.20 winx64 のインストールと設定方法を次のように説明します...

CentOS7にJDK8をrpmモードでインストールする

CentOS 7が正常にインストールされると、OpenJDKのJREがデフォルトでインストールされて...

Alibaba Cloud Centos7.X で外部にポートを開く方法

一言で言えば、大手メーカーからクラウド サーバーを購入する場合は、セキュリティ グループに移動して、...

Linux での MySQL 5.7.19 (tar.gz) インストール グラフィック チュートリアル

Linux で MySQL-5.7.19 バージョンをインストールするための最初のチュートリアル。す...

ElementUIテーブルのヘッダーアイコンにフローティングプロンプトを追加します。

この記事では主に、ElementUI テーブルのヘッダー アイコンにフローティング プロンプトを追加...

IDEA で Docker プロジェクトをデプロイする手順

現在、ほとんどのプロジェクトが Docker 上にデプロイされ始めていますが、デプロイのプロセスはま...