Если все ваши Наблюдаемые завершены и заказ в этом this.serviceProviderService.fetchServiceProviderLogo
вызван, не имеет значения, вы можете использовать комбинацию switchMap
(или mergeMap
) и merge
.Вам также не нужно отписываться, если все ваши запросы на выборку завершены.
fetchServiceProviders () {
this.serviceProviderService.fetchServiceProviders(new Map())
.pipe(
map(data => data._embedded.serviceProviders),
mergeMap(providers => merge(
providers.map(provider =>
this.serviceProviderService.fetchServiceProviderLogo({ 'id': provider.id })
.pipe(map(logo => ({ provider, logo })))
)
))
)
.subscribe(({ provider, logo }) => this.createIndividualLogoFromBlob(provider, logo));
}
Вместо merge
вы можете использовать forkJoin
для параллельного выполнения вызовов this.serviceProviderService.fetchServiceProviderLogo
.
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))
);
}