Différence entre Observable.defer et Observable.create dans java rx

Quelqu’un peut-il m’expliquer la différence entre defer et create méthodes dans Observable ? Je n’ai pas compris quand je devais utiliser defer et quand devrais-je utiliser create ..

LES RÉFÉRENCES:

Différer: http://reactivex.io/documentation/operators/defer.html

Créer: http://reactivex.io/documentation/operators/create.html

Je vous remercie

La distinction semble donc être: defer est une bonne chose lorsque quelque chose crée / retourne déjà une observation, mais vous ne voulez pas que ce processus se produise avant la souscription.

create est utile lorsque vous devez encapsuler manuellement un processus async et créer un observable. Cette création est également différée jusqu’à la souscription.

Pour le dire autrement:

defer est un opérateur qui permet la composition différée des séquences observables.

create est une implémentation personnalisée d’une séquence observable (où la création est différée jusqu’à la souscription).

Donc, si vous avez une situation dans laquelle vous pouvez utiliser just pour créer un Observable partir de certains résultats / valeurs ou si vous avez une couche d’API réseau qui renvoie un Observable de la demande, mais vous ne voulez pas que cette demande soit lancée avant la souscription. defer serait bon pour ces scénarios.

Si vous avez une couche d’API réseau qui ne renvoie pas d’ Observable pour une demande, mais pour laquelle vous avez besoin d’une interface Observable , vous pouvez utiliser create . Cette séquence Observable ne serait toujours pas créée avant l’abonnement. Si vous souhaitez que cet appel réseau soit lancé indépendamment de l’abonnement, vous utiliserez un mécanisme différent, tel qu’un Subject , potentiellement ce replays.

create (…) crée effectivement Observable immédiatement.

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

defer (…) accepte la fonction Factory qui renvoie Observable (Subject, etc …), l’enveloppe avec OnSubscribeDefer et crée Observable uniquement lorsque l’abonné s’abonne, nouvel observable pour chaque abonné.

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

Voir plus de détails ici