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. P>
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? P>
J'ai essayé la carte et l'opérateur de la place, mais je ne pouvais pas avoir un indice. p>
3 Réponses :
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 p>
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))
);
}
Voici un exemple simple. Vous pouvez considérer https://stackblitz.com/edit/rxjs-merge-providers?file=index.ts P> P> P> P> P> P> P > getItems code> et
getstreeetnamebyID code> vos fournisseurs.
Combien y a-t-il de fournisseurs de services?
Stackoverflow.com/ Questions / 4336549 / ... Stackoverflow.com/questions/48538562/... Stackoverflow.com/questions/51212448/...
Faites votre
fetchServiceProviders code> et
fetchServiceProviderlogo code> 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?