如何处理 RxJs 运营商的依赖 http 服务调用订阅?

绍福尔

我有一个名为 fetchSeviceProviders 的函数,它将返回一个服务提供商列表,并让我通过调用另一个服务来设置服务提供商的徽标。我通过使用两个订阅实现了这一点。

在第一次订阅时,我得到了列表。然后我映射它并通过所有服务提供者的 id 调用 fetchServiceProviderLogo。

这可以通过一次订阅来完成吗?我的方法行吗?如果不是,问题是什么?我怎样才能通过一些 rxjs 运营商做到这一点?

我尝试了 map 和 flatMap 运算符,但找不到线索。

fetchServiceProviders ()
{
    this.subscribers.fetchServiceProvidersLogoSub = this.serviceProviderService.fetchServiceProviders( new Map() ).subscribe(
        data =>
        {
            this.providers = data._embedded.serviceProviders;
            this.providers.map(
                provider =>
                {  
                    this.subscribers.fetchServiceProvidersLogoSub =
                        this.serviceProviderService.fetchServiceProviderLogo( { 'id': provider.id } ).subscribe(
                            logo =>
                            {
                                this.createIndividualLogoFromBlob( provider, logo );
                            }
                        );
                }
            );
        }
    )
}
弗里多

如果您所有的 Observable 都完成并且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))
    );
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

一些移动运营商已内联我的脚本-如何处理?

来自分类Dev

如何重新使用多个单运营商的变量?

来自分类Dev

如何关闭电话运营商的HTML优化?

来自分类Dev

如何评论运营商之间的大任务?

来自分类Dev

Kleene Star如何与Union运营商互动?

来自分类Dev

无法理解如何处理错误并继续订阅 RXJS

来自分类Dev

RxJs如何处理文档事件

来自分类Dev

如何在Android中获取来电的网络(运营商)详细信息

来自分类Dev

Rails4:如何验证运营商上传的图像大小?

来自分类Dev

如何使用Java来可选取代优雅三元运营商

来自分类Dev

在Azure开发运营商上:如何查看包位置目录$(Build.ArtifactStagingDirectory)的内容

来自分类Dev

如何检查分配给呼叫运营商结果的类型?

来自分类Dev

如何在R中重用管道运营商的长链部分?

来自分类Dev

如何测试我是否落后于运营商级或常规NAT?

来自分类Dev

如何在Android中获取来电的网络(运营商)详细信息

来自分类Dev

如何通过 GSM/LTE 模块发送运营商间短信

来自分类Dev

Kotlin的运营商是

来自分类Dev

运营商评估

来自分类Dev

运营商之间

来自分类Dev

如何使用RxJs运算符进行递归HTTP调用?

来自分类Dev

如何使用RxJS取消Angular服务中的先前HTTP请求

来自分类Dev

如何使用RxJS可观察的订阅调用中的值

来自分类Dev

如何处理TlsNotSupported并使用Network.HTTP.Client调用HTTPS URL?

来自分类Dev

如何处理阻止特定HTTP请求方法的代理服务器?

来自分类Dev

Clojure Immutant 2服务器Undertow;如何处理http POST?

来自分类Dev

如何处理内部服务器API和HTTP API之间的错误

来自分类Dev

HTTP服务器实现应如何处理内部错误?

来自分类Dev

是否有管道运营商将取消订阅内部可观测对象的内部可观测对象?

来自分类Dev

如何处理循环依赖?

Related 相关文章

  1. 1

    一些移动运营商已内联我的脚本-如何处理?

  2. 2

    如何重新使用多个单运营商的变量?

  3. 3

    如何关闭电话运营商的HTML优化?

  4. 4

    如何评论运营商之间的大任务?

  5. 5

    Kleene Star如何与Union运营商互动?

  6. 6

    无法理解如何处理错误并继续订阅 RXJS

  7. 7

    RxJs如何处理文档事件

  8. 8

    如何在Android中获取来电的网络(运营商)详细信息

  9. 9

    Rails4:如何验证运营商上传的图像大小?

  10. 10

    如何使用Java来可选取代优雅三元运营商

  11. 11

    在Azure开发运营商上:如何查看包位置目录$(Build.ArtifactStagingDirectory)的内容

  12. 12

    如何检查分配给呼叫运营商结果的类型?

  13. 13

    如何在R中重用管道运营商的长链部分?

  14. 14

    如何测试我是否落后于运营商级或常规NAT?

  15. 15

    如何在Android中获取来电的网络(运营商)详细信息

  16. 16

    如何通过 GSM/LTE 模块发送运营商间短信

  17. 17

    Kotlin的运营商是

  18. 18

    运营商评估

  19. 19

    运营商之间

  20. 20

    如何使用RxJs运算符进行递归HTTP调用?

  21. 21

    如何使用RxJS取消Angular服务中的先前HTTP请求

  22. 22

    如何使用RxJS可观察的订阅调用中的值

  23. 23

    如何处理TlsNotSupported并使用Network.HTTP.Client调用HTTPS URL?

  24. 24

    如何处理阻止特定HTTP请求方法的代理服务器?

  25. 25

    Clojure Immutant 2服务器Undertow;如何处理http POST?

  26. 26

    如何处理内部服务器API和HTTP API之间的错误

  27. 27

    HTTP服务器实现应如何处理内部错误?

  28. 28

    是否有管道运营商将取消订阅内部可观测对象的内部可观测对象?

  29. 29

    如何处理循环依赖?

热门标签

归档