2016-01-18 7 views

答えて

35

セマンティクスは、被験者の種類によって異なります。私はバニラ(Rx.Subject)と特別目的の科目(他の3つ)の2種類に分けます。特別目的科目は、専門化(例:完了/再接続行動)のために、いくつかの注意点があるバニラ科目のセマンティクスの一部を共有します。 (彼らは彼らのプロトタイプ上disposeハンドラを持っているようにし、使い捨てインタフェース)

バニラRx.Subjectセマンティクス

  1. 主な機能

    • 被験者オブザーバ、観測可能なインタフェースを実装します。ことを意味し、とりわけ、彼らが持っている:
      • オブザーバーインターフェース:onNextonErroronComplete方法
      • 観測可能なインターフェース:subscribe方法あなたが観察者にまたは観測可能に対象をキャストすることができ
    • 追加のインタフェース(.asObserver().asObservable())の実装が隠れている必要がある場合は、対象が観測可能である場合は、複数のオブザーバーを登録することができます。
    • その観測者は、そのデータをすべてのオブザーバーにブロードキャストします。内部的には、被験者は一連のオブザーバーを維持する。
    • 対象がオブザーバである場合、オブザーバと、2つの異なるエンティティである対象を構成するオブザーバとオブザーバブルの両方をサブスクライブできます。ユースケースであれば、別のエンティティとは独立して使用することができます。
    • unsubscribe all observers and release resources.
    • 被験者は、スケジューラを取るのではなくall serialization and grammatical correctness are handled by the caller of the subject.
    • 被験者のデフォルトの動作は、オブザーバーに同期その値を発するようにあることを前提としていないだろう主題をINGの
    • disposeは最初の加入オブザーバーで始まります最後のまで。ほとんどの場合、注文は問題にはなりません。

      この文法は観察配列は加入観察インスタンスにonNextメッセージの任意の量(0以上)を送信することができ、必要に応じて、続い:

IはRxjs contract and grammarの重要な側面を引用します単一成功(oncompleted)または失敗(onError)メッセージです。

  • new Rx.Subject()で作成した)バニラ対象は、その文法を実装していますonCompletedが一度呼び出されたときに、onNextへのすべての後続の呼び出しは無視されます。同じオブザーバー上のonCompletedの2番目の呼び出しも無視されます。オブザーバーがサブジェクトの観測可能な側に加入している場合、そのonCompleteコールバックが直ちに呼び出されます()。

  • jsfiddle)の観察にその観察者を接続する被写体を返し

    作成

    • new Rx.Subject()
  • 。この例は公式 documentationから取られ、サブジェクトをプロキシとして使用する方法を示しています。サブジェクトはソース(オブザーバー側)にサブスクライブされ、オブザーバー(観察可能な側)によっても聴かれます。 onNext(オブザーバー側)への呼び出しにより、オブザーバーごとに同じ値の onNextが呼び出されます。

    • Rx.Subject.create(observer, observable)

    指定観察と観察から被写体を作成します。それら2つは必ずしも接続されていません。ソケットからデータを送受信するために使用されるサブジェクトを返すRx.Dom.fromWebSocketの実装では、良い例が見られます。サブジェクトのオブザーバ側がデータをソケットに送信します。観測可能な側は、ソケットからの着信データをリッスンするために使用されます。また、このように作成されたサブジェクトにはdisposeメソッドがありません。

専門Rx.Subjectセマンティクス

  • このreactivex.io documentationはかなり専門科目の意味論のほとんどをカバーしています。
  • その他の興味深い点は、過去の完了動作に関することです。
  • 行動を示すサンプルコードうまくいけば、私はあまり間違って取得していないasyncbehaviorreplay

のためにここにいます。私は訂正させていただきます。最後に、RxJS v4ではこれが有効であるはずです。ホット/コールド観測の行動の詳細な説明については

、1はを参照できます。これは素晴らしい答えですHot and Cold observables : are there 'hot' and 'cold' operators?

+2

。これはRxJSのドキュメントにあります:https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/subjects.md PRを追加して追加できますか? @ user3743222 – HipsterZipster

+0

偉大な答え、努力をしてくれてありがとう。 –

関連する問題