defer
のcreate
メソッドとObservable
メソッドの違いを誰かが説明できますか? defer
を使用するタイミングとcreate
を使用するタイミングを理解できませんでした。
参考文献:
延期: http://reactivex.io/documentation/operators/defer.html
作成: http://reactivex.io/documentation/operators/create.html
ありがとうございました
したがって、区別は次のように思われます。defer
は、既にオブザーバブルを作成または返すものがある場合に適していますが、サブスクリプションまでそのプロセスが発生しないようにします。
create
は、非同期プロセスを手動でラップしてオブザーバブルを作成する必要がある場合に適しています。その作成は、サブスクリプションまでalso延期されます。
別の言い方をすれば:
defer
は、観測可能なシーケンスの遅延合成を可能にする演算子です。
create
は、監視可能なシーケンスのカスタム実装です(サブスクリプションまで作成が延期されます)。
したがって、何らかの結果/値からjust
を作成するためにObservable
を使用する場合、またはリクエストのObservable
を返すネットワークAPIレイヤーがある場合、ただし、サブスクリプションまでそのリクエストを開始したくありません。 defer
は、これらのシナリオに適しています。
しないリクエストに対してObservable
を返すが、Observable
インターフェイスが必要なネットワークAPIレイヤーがある場合は、create
。 Observable
シーケンスは、サブスクリプションまで作成されません。そのネットワークコールをサブスクリプションに関係なく開始したい場合は、Subject
などの別のメカニズムを使用して、リプレイする可能性があります。
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));
}
詳細を参照してください こちら