23

このトピックのドキュメントはまばらで、そこに「エントリ ポイント」を見つけるのは困難です。

4

1 に答える 1

47

セマンティクスは、サブジェクトのタイプによって異なります。Rx.Subjectバニラ ( ) と特殊目的 (その他の 3 つ) の2 種類に分けて説明します。特殊な目的のサブジェクトは、バニラ サブジェクトのセマンティクスの一部を共有しますが、その特殊化 (完了/再接続動作など) によるいくつかの注意事項があります。

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

  1. 主な機能

    • サブジェクトは、オブザーバー、オブザーバブル インターフェイス (およびdisposeプロトタイプにハンドラーがあるため、使い捨てインターフェイス) を実装します。つまり、とりわけ、次のようなものがあります。
      • オブザーバー インターフェイス: onNextonErroronCompleteメソッド
      • オブザーバブル インターフェイス :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/ )。

    1. 創造

      • new Rx.Subject()

    オブザーバーをオブザーバブル ( jsfiddle ) に接続するサブジェクトを返します。この例は、公式ドキュメントから取得したもので、サブジェクトをプロキシとして使用する方法を示しています。サブジェクトはソース (オブザーバー側) にサブスクライブされ、オブザーバーによってリッスンされます (オブザーバブル側)。onNext(オブザーバー側)への呼び出しonNextは、オブザーバーごとに同じ値で呼び出している観察可能な側になります。

    • Rx.Subject.create(observer, observable)

    指定されたオブザーバーとオブザーバブルからサブジェクトを作成します。この 2 つは必ずしも接続されているわけではありません。Rx.Dom.fromWebSocket良い例は、ソケットからデータを送受信するために使用されるサブジェクトを返す実装で見ることができます。サブジェクトのオブザーバー側は、データをソケットに送信します。オブザーバブル側は、ソケットからの受信データをリッスンするために使用されます。また、この方法で作成されたサブジェクトにはメソッドがありませんdispose

特殊化された Rx.Subject セマンティクス

  • このreactivex.ioドキュメンテーションは、専門的な主題のセマンティクスのほとんどをかなりうまくカバーしています。
  • 言及する他の興味深い点は、完了後の動作に関するものです。
  • asyncbehaviorreplayの動作を示すサンプル コードはこちら

うまくいけば、私はあまり間違っていませんでした。喜んで訂正させていただきます。最後に、これは RxJS v4 で有効なはずです。

コールド/ホット オブザーバブルの動作の詳細な説明については、以下を参照できます:ホット オブザーバブルとコールド オブザーバブル : 「ホット」と「コールド」の演算子がありますか?

于 2016-01-18T17:36:16.660 に答える