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