Partage
  • Partager sur Facebook
  • Partager sur Twitter

RxJS Subscription then ?

    5 janvier 2019 à 20:59:38

    Bonsoir,

    J'utilise des subscriptions imbriquées comme l'exemple ci-dessous (pour des raisons de dépendances):

    this.gameSubscription = this.gameService.getGame(id).subscribe((game: Game) => {
                                        if (game) {
    
                                            this.messagesSubscription = this.messageService.getMessages(game).subscribe((result: Message[]) => {
                                                
                                            });
    
                                        }
                                    });

    Plusieurs questions:

    - Est-ce qu'il y a une manière plus propre de faire ça ? Le problème c'est que ça donne des imbrications de code qui deviennent vite longues et pas du tout propre (étant donné que j'ai 5-6 subsriptions, chacune a besoin d'une valeur de la précédente).

    - Est-ce qu'il existe un .then après un suscribe ? J'ai rien trouvé sur le net à ce sujet. Comment faire si on veut attendre la fin du subscribe avant de faire quelque chose ? (et si on ne veut pas le mettre dedans pour que ce ne soit pas dépendant). J'avais vu un exemple disant qu'il y avait trois paramètres dans la fonction subscribe avec le second l'erreur et le troisième un callback mais après avoir essayé ça ne fonctionne pas.

    Merci d'avance à plus !

    -
    Edité par Emerica 5 janvier 2019 à 21:00:03

    • Partager sur Facebook
    • Partager sur Twitter
      6 janvier 2019 à 10:26:18

      Salut,

      dans ton cas je pense que l'utilisation d'un Subject pourrait t'être utile :

      private messagesSubject = new Subject();
      
      // Pour ajouter de nouvelles valeurs
      this.messageService.getMessages().subscribe((result: Message[]) => {
          this.messagesSubject.push(result);
      });

      Après faut adapter à ton code exactement, tu peut avoir un seul sujet pour tout tes jeux, et faire un pipe pour récupérer que les messages qui t'intéressent :

      this.gameService.getGame(id).subscribe((game: Game) => {
          if(game) {
              this.messagesSubject.pipe(
                  filter(data => data.game.id === game.id )
              ).subscribe(data => {
                  // ta logique
              });
          }
      });




      -
      Edité par lk77 6 janvier 2019 à 10:36:58

      • Partager sur Facebook
      • Partager sur Twitter
        14 janvier 2019 à 22:49:44

        D'accord merci et comment écrire quelque chose du genre:

        await this.messageService.getMessages().subscribe((result: Message[]) => {
        this.messagesSubject.push(result);
        });
        • Partager sur Facebook
        • Partager sur Twitter

        RxJS Subscription then ?

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown