トピックのドキュメントはまばらであり、そこに「入り口」を見つけることは困難です。
意味論は主題のタイプによって異なります。バニラ(_Rx.Subject
_)と専用サブジェクト(他の3つ)の2種類に分けます。特別な目的のサブジェクトは、その特殊化(たとえば、完了/再接続動作)のために、いくつかの注意点があるバニラサブジェクトのセマンティクスの一部を共有します。
バニラRx.Subjectセマンティクス
主な特徴
dispose
ハンドラーがあるため、使い捨てインターフェイス)を実装します。それは、とりわけ、彼らが持っていることを意味します:onNext
、onError
、onComplete
メソッドsubscribe
メソッド.asObserver()
、and .asObservable()
)必要な場合dispose
ingサブジェクトは すべてのオブザーバの登録を解除し、リソースを解放します。Rxjsコントラクトと文法 の重要な側面を引用します:
この文法により、オブザーバブルシーケンスは任意の量(0以上)のonNextメッセージをサブスクライブしたオブザーバーインスタンスに送信でき、オプションでその後に単一の成功(onCompleted)または失敗(onError)メッセージが続きます。
バニラのサブジェクト(new Rx.Subject()
で作成)はその文法を実装します。onCompleted
が1回呼び出されると、その後のonNext
の呼び出しはすべて無視されます。同じオブザーバーでのonCompleted
の2回目の呼び出しも無視されます。オブザーバーがサブジェクトのオブザーバブル側にサブスクライブすると、その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
_ documentation で、専門分野のほとんどのセマンティクスをかなりカバーしています。うまくいけば、私はあまり間違えなかった。修正させていただきます。最後の注意、これはRxJS v4に有効です。
コールド/ホットオブザーバブルの動作の詳細な説明については、 ホットおよびコールドオブザーバブル:「ホット」および「コールド」演算子はありますか?