0
votes

Comment appeler une fonction une fois de Observable.Subscribe Quoi qu'il en soit s'il existe des données ou non dans des rxjs angulaires?

Il y a un observable qui prend des données du point d'extrémité: xxx

Lorsque la méthode du filtre de RxJS trouve un élément, il incendie souscrire et tout fonctionne comme prévu. Mais lorsque le filtre ne trouvera pas d'article, l'abonnement n'est pas tiré. Mais j'aimerais aussi gérer ce scénario. J'ai essayé d'utiliser complet: xxx

mais que, SPOWNCONCtion est appelé deux fois si des données sont présentes: une fois avec des données et une fois de la fonction remplie.

Comment gérer l'observable afin que je puisse appeler une fonction spéciale une fois, sans distinction s'il existe des données ou non, avec des données incluses s'il y a des données?


2 commentaires

Traitez-le sur Terminer uniquement et démarrez votre gestionnaire avec si (données) {...} ?


C'est une idée, mais comment réussir les données gentiment à côté suivant?


3 Réponses :


1
votes

Vous pouvez filtrer vos données dans votre abonnement.

this.get().subscribe((data) => {
    const filteredData = data.filter(item => item.id = providedId);
    specialFunction(filteredData);
});


function specialFunction(data: any|undefined) {
    ...
}


0 commentaires

0
votes

Vous ne voulez vraiment pas utiliser filtrer. Utilisez une carte et gérez la correspondance dans Abonnez-vous:

this.get().pipe(
  map(item => { isMatch: item.id == providedId, item })
).subscribe({
    next: (data) => {
       if (data.isMatch) {
           specialFunction(data.item);
       } else {
          // handle non-match
       }
    },
    complete: (data) => {
       specialFunction();
    }
})


1 commentaires

Merci, il y a en fait plusieurs articles pouvant satisfaire au filtre. Je ne sais pas si cela fonctionnera de cette façon



0
votes

Je ne vois pas pourquoi vous ne pouviez pas vérifier vos conditions à l'intérieur de la carte RXJS et renvoyer la valeur véridée si la condition passe et "autre chose" sinon. Mais pour jeter une autre option, vous pouvez ...

Peut-être utiliser iIF :

Abonnez-vous à la première ou au second observable basé sur une condition

Alors peut-être quelque chose comme ceci: xxx


0 commentaires