0
votes

Comment gérer l'abonnement de l'appel de service HTTP dépendant par les opérateurs RXJS?

J'ai une fonction nommée fetchseviceproviders qui me retournera une liste de fournisseurs de services et permettra de définir le logo des fournisseurs de services en appelant un autre service. Je l'ai atteint en utilisant deux abonnements.

Au premier abonnement, je reçois la liste. Ensuite, je le mappe et appelez le FetchServiceProviderLogo par tous les fournisseurs de services.

Peut-on faire avec un abonnement? Est ma méthode ok? Sinon, quel est le problème? Comment puis-je faire cela par certains opérateurs RXJS?

J'ai essayé la carte et l'opérateur de la place, mais je ne pouvais pas avoir un indice. xxx


4 commentaires

Combien y a-t-il de fournisseurs de services?


Stackoverflow.com/ Questions / 4336549 / ... Stackoverflow.com/questions/48538562/... Stackoverflow.com/questions/51212448/...


Faites votre fetchServiceProviders et fetchServiceProviderlogo Observables terminés? Est-ce qu'ils n'émettent-ils qu'une seule valeur ou multiple?


Dupliqué possible de Comment forcer les observables à exécuter en séquence?


3 Réponses :


0
votes

Dans votre code, vous vous abonnez à chaque service ServiceProvider. Si vous voulez tout faire à la fois, vous pouvez jeter un coup d'œil sur l'opérateur de fusion: HTTPS: / /wwww.learnrxjs.io/opérators/commination/merge.html


0 commentaires

1
votes

Si tous vos observables complètent et la commande dans ce ceci.serviceProviderservice.fetchserviceProviderlogo code> est appelé que vous pouvez utiliser une combinaison de Switchmap code> (ou mergemap code>) et fusionner code>. Vous n'avez pas non plus à vous désabonner si votre fetch demande toutes les demandes complètes.

fetchServiceProviders () {
  this.serviceProviderService.fetchServiceProviders(new Map())
    .pipe(
      map(data => data._embedded.serviceProviders),
      mergeMap(providers => forkJoin(
        providers.map(provider =>
          this.serviceProviderService.fetchServiceProviderLogo({ 'id': provider.id })
           .pipe(map(logo => ({ provider, logo })))
        )
      ))
    )
    .subscribe(providerLogos =>
       providerLogos.forEach(({ provider, logo }) => this.createIndividualLogoFromBlob(provider, logo))
    );
}


0 commentaires

0
votes

Voici un exemple simple. Vous pouvez considérer getItems et getstreeetnamebyID vos fournisseurs. xxx

https://stackblitz.com/edit/rxjs-merge-providers?file=index.ts


0 commentaires