ホームページ >ウェブフロントエンド >jsチュートリアル >Rx Observable はデフォルトでコールドですか? 「公開」と「共有」によるデータの流れを理解する

Rx Observable はデフォルトでコールドですか? 「公開」と「共有」によるデータの流れを理解する

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-29 22:40:29236ブラウズ

 Are Rx Observables Cold by Default?  Understanding the Flow of Data with  `publish` and `share`

ホットおよびコールドのオブザーバブル: データの流れを理解する

すべての Rx オブザーバブルはデフォルトでコールドですか?

デフォルトでは、被験者を除いて、すべての Rx 観測値はコールドです。これは、少なくとも 1 人のオブザーバーがサブスクライブしている場合にのみ値を発行することを意味します。

コールド オブザーバブルをホット オブザーバブルに変えるための Rx オペレーター

主なオペレーターは 2 つあります。コールド オブザーバブルをホット オブザーバブルに変換できます:

  • publish: 接続可能なオブザーバブルを返します。接続された場合にのみ値の発行を開始します。
  • share: パブリッシュと似ていますが、最初のオブザーバーがサブスクライブするときにオブザーバブルを自動的に接続します。観測対象の寒さや暑さは変わりません。あなたの例では:

cold$.withlateFrom(sth$,...) は依然としてコールドオブザーバブルです。複数のオブザーバブルが withlatestFrom を使用して cold$ にサブスクライブされている場合、それらはサブスクリプション時間に関係なく、それぞれ同じ値のシーケンスを消費します。

    Rx.fromEvent とホット/コールド動作
  • で観察された矛盾CodePen の例は、Rx.fromEvent オブザーバブルがサブスクライブされたときではなく、要素がクリックされたときにのみイベントが発行されるという事実によるものです。このため、Observable への各サブスクリプションは異なるイベントを受け取ります。

Cold Observable の簡略化されたフロー図

Cold Observable の簡略化されたデータ フローを示すと、次のようになります。

ホット オブザーバブルの簡略化されたフロー図

ホット オブザーバブルのフローは次のとおりです:

Source -> Observer1 -> Observer2

サブジェクトは中央ハブとして機能します

マルチキャスト オペレーター (公開/共有)

Source -> Subject -> Observer1 -> Observer2
マルチキャスト オペレーターは内部でサブジェクトを作成し、接続可能なオブザーバブルを返します。オブザーバブルが接続されると、サブジェクトはアップストリームのオブザーバブルをサブスクライブし、サブスクライブされたすべてのオブザーバーにデータをマルチキャストします。

オペレーターを使用する際のデータ フローを考慮する

データ フローを理解するそしてオペレーターの行動が非常に重要です。たとえオブザーバブルがホットであっても、後続の演算子がそのホットまたはコールドの動作にどのような影響を与えるかを考慮することが重要です。

以上がRx Observable はデフォルトでコールドですか? 「公開」と「共有」によるデータの流れを理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。