为什么我应该使用mergemap而不是嵌套的http调用?

麦可

我已经在RXJS库的帮助下创建了嵌套的http调用:

this.http.get('/api/people/1').subscribe(character => {
  this.http.get(character.homeworld).subscribe(homeworld => {
    character.homeworld = homeworld;
    this.loadedCharacter = character;
  });
  

但是我的一些见解告诉我,使用流和RXJS从API提取数据的正确方法是:

this.homeworld = this.http
  .get('/api/people/1')
  .pipe(mergeMap(character => this.http.get(character.homeworld)));
  

请告诉我为什么第二种方法比第一种更好。为什么我应该使用mergemap以及为什么它比使用嵌套的http调用更好?

马辛·米勒维奇

这与嵌套的http调用无关,而与RxJS反模式的嵌套订阅有关。RxJS是一个以反应方式和声明方式解决问题的库。这意味着应将应用程序中的数据流描述为流。RxJS中的良好模式假定整个流应被编写为一个延迟加载的流。就您而言,整个流程为:fetch person with id=1 -> determine homeworld -> fetch homeworld因此,您实际上并不在乎人的细节,而在乎homeworld请注意,在第二种情况下,您不调用任何http方法,您只能编写惰性流。它允许您就地使用此流或在不存储状态的情况下在其他位置订阅它。这是一个巨大的优势,因为您不必关心状态或中间状态(命令式方法)。

此外,当您使用时,您.subscribe()可以创建应在服务/组件生命周期中进行管理的订阅。如果创建一个流流,则仅创建一个订阅,因此订阅管理更加简单。我知道,http.get / post可观察的是在获取数据后完成的,但是如果将组件保留在进行HTTP调用的地方该怎么办?代码将在不存在的范围内执行副作用。

我认为您也可以在https://medium.com/angular-in-depth/when-to-subscribe-a83332ae053中找到很好的解释

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我应该将此http调用移至外部服务

来自分类Dev

为什么我应该使用常量顶点属性而不是制服?

来自分类Dev

为什么我应该使用.forEach语法而不是for循环语法?

来自分类Dev

为什么我不应该使用“ inout”而不是“ in”或“ out”?

来自分类Dev

为什么我应该使用方法而不是__init __()?

来自分类Dev

序言-为什么我应该使用'dif'而不是'= \ ='

来自分类Dev

为什么我应该使用Vagrant而不是VirtualBox?

来自分类Dev

为什么我应该总是使用|| 代替| 和&&而不是&?

来自分类Dev

为什么应该使用资源而不是路由?

来自分类Dev

python“array”模块有什么作用,为什么我应该使用它而不是列表?

来自分类Dev

为什么我应该使用CUDA驱动程序API而不是CUDA运行时API?

来自分类Dev

为什么我们应该使用类而不是记录,反之亦然?

来自分类Dev

为什么我应该在Android中使用匿名类而不是类重新定义?

来自分类Dev

为什么我不应该一直使用ICollection而不是IEnumerable?

来自分类Dev

为什么我应该使用简单数组而不是容器类?

来自分类Dev

为什么我应该使用DECLARE_DYNAMIC而不是DECLARE_DYNCREATE?

来自分类Dev

我应该使用ViewModelProvider而不是ViewModelProviders吗?如果是这样,为什么?

来自分类Dev

为什么我们应该使用接口而不是具体类型?

来自分类Dev

为什么我们应该使用本地php gettext而不是gettexxt库

来自分类Dev

为什么我应该使用float而不是display:table-cell?

来自分类Dev

Java FX为什么我应该使用SimpleProperties而不是普通的nativ变量?

来自分类Dev

为什么我应该使用$ cacheFactory而不是手动获取/设置数据?

来自分类Dev

为什么我应该使用块作用域而不是函数作用域?

来自分类Dev

为什么我应该在 Projectile Motion 中使用速度方程而不是位置方程

来自分类Dev

为什么我应该使用Django表格

来自分类Dev

为什么我应该使用JPanel?

来自分类Dev

为什么我不应该使用catch()处理React useEffect API调用中的错误?

来自分类Dev

为什么使用绑定而不是函数调用?

来自分类Dev

为什么使用绑定而不是函数调用?

Related 相关文章

  1. 1

    为什么我应该将此http调用移至外部服务

  2. 2

    为什么我应该使用常量顶点属性而不是制服?

  3. 3

    为什么我应该使用.forEach语法而不是for循环语法?

  4. 4

    为什么我不应该使用“ inout”而不是“ in”或“ out”?

  5. 5

    为什么我应该使用方法而不是__init __()?

  6. 6

    序言-为什么我应该使用'dif'而不是'= \ ='

  7. 7

    为什么我应该使用Vagrant而不是VirtualBox?

  8. 8

    为什么我应该总是使用|| 代替| 和&&而不是&?

  9. 9

    为什么应该使用资源而不是路由?

  10. 10

    python“array”模块有什么作用,为什么我应该使用它而不是列表?

  11. 11

    为什么我应该使用CUDA驱动程序API而不是CUDA运行时API?

  12. 12

    为什么我们应该使用类而不是记录,反之亦然?

  13. 13

    为什么我应该在Android中使用匿名类而不是类重新定义?

  14. 14

    为什么我不应该一直使用ICollection而不是IEnumerable?

  15. 15

    为什么我应该使用简单数组而不是容器类?

  16. 16

    为什么我应该使用DECLARE_DYNAMIC而不是DECLARE_DYNCREATE?

  17. 17

    我应该使用ViewModelProvider而不是ViewModelProviders吗?如果是这样,为什么?

  18. 18

    为什么我们应该使用接口而不是具体类型?

  19. 19

    为什么我们应该使用本地php gettext而不是gettexxt库

  20. 20

    为什么我应该使用float而不是display:table-cell?

  21. 21

    Java FX为什么我应该使用SimpleProperties而不是普通的nativ变量?

  22. 22

    为什么我应该使用$ cacheFactory而不是手动获取/设置数据?

  23. 23

    为什么我应该使用块作用域而不是函数作用域?

  24. 24

    为什么我应该在 Projectile Motion 中使用速度方程而不是位置方程

  25. 25

    为什么我应该使用Django表格

  26. 26

    为什么我应该使用JPanel?

  27. 27

    为什么我不应该使用catch()处理React useEffect API调用中的错误?

  28. 28

    为什么使用绑定而不是函数调用?

  29. 29

    为什么使用绑定而不是函数调用?

热门标签

归档