web-dev-qa-db-fra.com

En attendant la fin d'un observable

J'ai une méthode qui doit attendre la fin d'un observable. Je sais que l'observable est idéal pour renvoyer des données individuelles au fil du temps, mais j'ai besoin de savoir quand cet observable a complètement terminé de renvoyer toutes ses données afin que je puisse exécuter le code de validation sur l'objet qu'il a retourné.

La méthode getCustom s'abonne à une exécution observable sur l'URL fournie qui renvoie ensuite l'observable.

Je ne sais pas trop si c'est la meilleure façon d'aborder cette situation, donc j'apprécierais que quelqu'un puisse me donner des conseils ou une direction pour gérer cela.

  private validateQuoteRetrievalAnswers(reference: string) {

         // Get the risk from the server
        this.riskManager.getRiskFromServer(reference);

        if (this.riskManager.risk) {
            // Validate risk that was returned
        }
    }
getRiskFromServer(quoteReference: string) {

    this.riskService.getCustom("Url").subscribe => {
        // need to know when the observable has returned the risk
    });

}
7
user4129529

comment je pourrais relever ce défi:

Recherchez votre back-end et quand nous avons ce dont nous avons besoin Poussez-le vers un sujet

riskSubject = new Subject<Risk>();

getRiskFromServer(quoteReference: string) {
  this.riskService.getCustom("Url")
  .subscribe( 
    data => { this.riskSubject.next(data); },
    error => { console.log(error) }
 });
}

puis abonnez-vous au sujet et attendez d'avoir ce dont vous avez besoin et commencez à valider

private validateQuoteRetrievalAnswers(reference: string) {

         // Get the risk from the server
        this.riskManager.getRiskFromServer(reference);
        // subscribe to subject
        this.riskManager.riskSubject.subscribe(
         data => {
           //do your validation
        })
}

Le cœur d'un service de données observable est le sujet RxJs. Les sujets implémentent à la fois les interfaces Observer et Observable, ce qui signifie que nous pouvons les utiliser pour émettre des valeurs et enregistrer des indices.

Le sujet n'est rien de plus qu'un bus d'événements traditionnel, mais beaucoup plus puissant car il en fournit tous les opérateurs fonctionnels RxJ. Mais au fond, nous l'utilisons simplement pour vous abonner comme un observable régulier

source: angular-university.io

OU vous pouvez utiliser Observable.fromPromise (promesse) mais cela rendra les choses un peu plus compliquées à comprendre si vous êtes nouveau sur ng2

4
VikingCode