web-dev-qa-db-ja.com

Java rxのObservable.deferとObservable.createの違い

defercreateメソッドとObservableメソッドの違いを誰かが説明できますか? deferを使用するタイミングとcreateを使用するタイミングを理解できませんでした。

参考文献:

延期: http://reactivex.io/documentation/operators/defer.html

作成: http://reactivex.io/documentation/operators/create.html

ありがとうございました

23
Xitrum

したがって、区別は次のように思われます。deferは、既にオブザーバブルを作成または返すものがある場合に適していますが、サブスクリプションまでそのプロセスが発生しないようにします。

createは、非同期プロセスを手動でラップしてオブザーバブルを作成する必要がある場合に適しています。その作成は、サブスクリプションまでalso延期されます。

別の言い方をすれば:

deferは、観測可能なシーケンスの遅延合成を可能にする演算子です。

createは、監視可能なシーケンスのカスタム実装です(サブスクリプションまで作成が延期されます)。

したがって、何らかの結果/値からjustを作成するためにObservableを使用する場合、またはリクエストのObservableを返すネットワークAPIレイヤーがある場合、ただし、サブスクリプションまでそのリクエストを開始したくありません。 deferは、これらのシナリオに適しています。

しないリクエストに対してObservableを返すが、Observableインターフェイスが必要なネットワークAPIレイヤーがある場合は、createObservableシーケンスは、サブスクリプションまで作成されません。そのネットワークコールをサブスクリプションに関係なく開始したい場合は、Subjectなどの別のメカニズムを使用して、リプレイする可能性があります。

20
Bob Spryn

create(...)は実際にObservableをすぐに作成します。

    public final static <T> Observable<T> create(OnSubscribe<T> f) {
        return new Observable<T>(hook.onCreate(f));
    }

defer(...)は、Observable(Subject、etc ...)を返すFactory関数を受け入れ、OnSubscribeDeferでラップし、サブスクライバーがサブスクライブするときにのみObservableを作成します。すべてのサブスクライバーに対して新しいObservableです。

public final static <T> Observable<T> defer(Func0<Observable<T>> observableFactory) {
    return create(new OnSubscribeDefer<T>(observableFactory));
}

詳細を参照してください こちら

13
Dennis R