web-dev-qa-db-fra.com

Utilisation de l'interface grand public de Reactivex

Je suis nouveau sur ReactiveX. Je l'ai appris en lisant le code source. Tout était si clair mais tout à coup, j'ai eu ce mot nommé "Consumer" qui était une interface. Il a été utilisé à la place d'Observer.

Quelqu'un peut-il me faire savoir ce qu'il fait exactement?

J'ai suivi plusieurs liens, mais ils n'ont tous dit qu'une seule déclaration le consommateur est une interface fonctionnelle (rappel) qui accepte une seule valeur.

Je veux en connaître le fonctionnement exact.

  1. Qu'Est-ce que c'est?
  2. Pourquoi en avons-nous besoin?
  3. Comment l'utilisez-vous?
  4. Remplace-t-il l'observateur? Si OUI, comment et pourquoi?
16
Abhishek Kumar

Consumer est une simple interface Java qui accepte les variables de type T. et comme vous l'avez dit, elle est utilisée pour les rappels.

Exemple:

import io.reactivex.functions.Consumer;

Flowable.just("Hello world")
  .subscribe(new Consumer<String>() {
      @Override public void accept(String s) {
          System.out.println(s);
      }
  });

Pourquoi ça marche? Comment utiliser un consommateur au lieu d'un observateur?

RxJava crée simplement un observateur, lui passe le consommateur et il est appelé dans onNext

Mise à jour

LambdaObserver est une sorte d'observateur qui est créé à partir de quatre interfaces fonctionnelles et les utilise comme rappels. C'est principalement pour utiliser Java 8 expressions lambda . Cela ressemble à ceci:

Observable.just(new Object())
                .subscribe(
                        o -> processOnNext(o),
                        throwable -> processError(throwable),
                        () -> processCompletion(),
                        disposable -> processSubscription()
                );
14
Amaksoft

Un Consumer consomme les valeurs que vous recevez lors de votre abonnement. C'est comme un Subscriber qui passe les données émises comme rappel.

Consumer est une interface simple qui a un rappel pour un type générique et est nécessaire pour recevoir les éléments émis par le Observable.

Veillez à ce que si vous n'avez qu'un consommateur, vous n'attrapiez pas d'erreurs et vous puissiez rencontrer des problèmes en déboguant.

Vous pouvez résoudre ce problème en utilisant un autre consommateur comme deuxième paramètre qui reçoit un Throwable.

Flowable.just("Hello world")
  .subscribe(
            emittedData -> System.out.println(s), 
            error -> System.out.println("Error occured: "+ error)
);
4
Emanuel S

À mon humble avis, le consommateur est pour les flux inverses/bidirectionnels.

Par exemple, votre source de données émet un "Y" d'opérations complexes dépendant du temps exécutées à partir d'un paramètre "X" sous la forme d'un fluxable "chaud" (HF).

Supposons que le paramètre X soit émis via un observable "chaud" (HO), ainsi, votre source de données peut être un consommateur qui souscrit au "HO" et émet le résultat des opérations complexes via le HF.

Dans ce cas, vous avez le flux bidirectionnel et vous avez utilisé le consommateur pour pousser la date fournie via le HO dans la source de données.

Je ne sais pas si ma réponse est vraiment correcte ... rx est un peu complexe: B

0