このトピックのドキュメントはまばらで、そこに「エントリ ポイント」を見つけるのは困難です。
1 に答える
セマンティクスは、サブジェクトのタイプによって異なります。Rx.Subject
バニラ ( ) と特殊目的 (その他の 3 つ) の2 種類に分けて説明します。特殊な目的のサブジェクトは、バニラ サブジェクトのセマンティクスの一部を共有しますが、その特殊化 (完了/再接続動作など) によるいくつかの注意事項があります。
バニラ Rx.Subject セマンティクス
主な機能
- サブジェクトは、オブザーバー、オブザーバブル インターフェイス (および
dispose
プロトタイプにハンドラーがあるため、使い捨てインターフェイス) を実装します。つまり、とりわけ、次のようなものがあります。- オブザーバー インターフェイス:
onNext
、onError
、onComplete
メソッド - オブザーバブル インターフェイス :
subscribe
メソッド
- オブザーバー インターフェイス:
- 必要に応じて、サブジェクトをオブザーバーまたはオブザーバブルにキャストし、追加のインターフェイスの実装を非表示にすることができます (cf.
.asObserver()
および.asObservable()
)。 - サブジェクトはオブザーバブルであるため、複数のオブザーバーをサブスクライブできます。そのオブザーバブルは、そのデータをすべてのオブザーバーにブロードキャストします。内部的に、サブジェクトはオブザーバーの配列を維持します。
- サブジェクトはオブザーバーであるため、任意のオブザーバブルにサブスクライブできます
- サブジェクトを構成するオブザーバーとオブザーバブルは2つの異なるエンティティであり、それがユースケースである場合は、それらを互いに独立して使用できます。
dispose
サブジェクトを ing すると、すべてのオブザーバーのサブスクライブが解除され、リソースが解放されます。- サブジェクトはスケジューラを使用しませんが、サブジェクトの呼び出し元によってすべてのシリアル化と文法の正確さが処理されると想定しています。
- サブジェクトのデフォルトの動作は、最初にサブスクライブしたオブザーバーから最後の. ほとんどの場合、順序は重要ではありませんが、そうでない場合もあります。
- サブジェクトは、オブザーバー、オブザーバブル インターフェイス (および
Rxjs の契約と文法の重要な側面を引用します。
この文法により、オブザーバブル シーケンスは任意の量 (0 以上) の onNext メッセージをサブスクライブしたオブザーバー インスタンスに送信できます。オプションで、単一の成功 (onCompleted) または失敗 (onError) メッセージが続きます。
バニラ サブジェクト ( で作成
new Rx.Subject()
) はその文法を実装します:onCompleted
が一度呼び出されると、以降の呼び出しはすべてonNext
無視されます。同じオブザーバーに対する の2 回目の呼び出しonCompleted
も無視されます。オブザーバーがサブジェクトの観察可能な側にサブスクライブすると、そのonComplete
コールバックがすぐに呼び出されます ( http://jsfiddle.net/cLf6Lqsn/1/ )。創造
new Rx.Subject()
オブザーバーをオブザーバブル ( jsfiddle ) に接続するサブジェクトを返します。この例は、公式ドキュメントから取得したもので、サブジェクトをプロキシとして使用する方法を示しています。サブジェクトはソース (オブザーバー側) にサブスクライブされ、オブザーバーによってリッスンされます (オブザーバブル側)。
onNext
(オブザーバー側)への呼び出しonNext
は、オブザーバーごとに同じ値で呼び出している観察可能な側になります。Rx.Subject.create(observer, observable)
指定されたオブザーバーとオブザーバブルからサブジェクトを作成します。この 2 つは必ずしも接続されているわけではありません。
Rx.Dom.fromWebSocket
良い例は、ソケットからデータを送受信するために使用されるサブジェクトを返す実装で見ることができます。サブジェクトのオブザーバー側は、データをソケットに送信します。オブザーバブル側は、ソケットからの受信データをリッスンするために使用されます。また、この方法で作成されたサブジェクトにはメソッドがありませんdispose
。
特殊化された Rx.Subject セマンティクス
- この
reactivex.io
ドキュメンテーションは、専門的な主題のセマンティクスのほとんどをかなりうまくカバーしています。 - 言及する他の興味深い点は、完了後の動作に関するものです。
- async、behavior、replayの動作を示すサンプル コードはこちら
うまくいけば、私はあまり間違っていませんでした。喜んで訂正させていただきます。最後に、これは RxJS v4 で有効なはずです。
コールド/ホット オブザーバブルの動作の詳細な説明については、以下を参照できます:ホット オブザーバブルとコールド オブザーバブル : 「ホット」と「コールド」の演算子がありますか?