Quelqu'un peut-il m'expliquer la différence entre les méthodes defer
et create
dans Observable
? Je n'ai pas compris quand utiliser defer
et quand 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
Donc, la distinction semble être: defer
est bonne lorsque vous avez déjà quelque chose qui crée/retourne un observable, mais vous ne voulez pas que ce processus se produise jusqu'à la souscription.
create
est utile lorsque vous devez envelopper manuellement un processus asynchrone 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 de séquences observables.
create
est une implémentation personnalisée d'une séquence observable (où la création est différée jusqu'à l'abonnement).
Donc, si vous avez une situation où vous pouvez utiliser just
pour créer un Observable
à partir de certains résultats/valeur ou si vous avez une couche API réseau qui renvoie un Observable
de la demande, mais vous ne voulez pas que cette demande démarre avant la souscription. defer
serait bon pour ces scénarios.
Si vous avez une couche d'API réseau qui pas renvoie un Observable
pour une demande, mais pour laquelle vous avez besoin d'une interface Observable
, vous pouvez utiliser create
. Cependant, cette séquence Observable
ne sera toujours pas créée avant la souscription. Si vous vouliez que cet appel réseau démarre, quel que soit l'abonnement, vous utiliseriez un mécanisme différent, comme un Subject
, potentiellement qui rediffuse.
create (...) crée en fait Observable immédiatement.
public final static <T> Observable<T> create(OnSubscribe<T> f) {
return new Observable<T>(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 <T> Observable<T> defer(Func0<Observable<T>> observableFactory) {
return create(new OnSubscribeDefer<T>(observableFactory));
}
Voir plus de détails ici