为什么在Angular中通过HTTP使用Observable

时间:2019-09-30 03:02:00

标签: angular http observable

我是Angular的新手,我想弄清楚在什么情况下最好使用rxjs / Observables而不是仅使用Http get / post调用。

据我所读,在需要以推送方式而不是Javascript中的拉动方式延迟加载数据时,最好使用Observable。另外,似乎数据将以未预定义的任何数量进行批处理。作为Observables的用例,我唯一能想到的就是使用Web套接字和诸如新闻提要之类的东西或诸如此类的Facebook feed之类的东西,但是我已经看到了一些使用Observables进行HTTP GET调用的示例也一样我不确定为什么需要这样做。

如果我只能执行http.get,为什么需要执行http.get()。subscribe?

2 个答案:

答案 0 :(得分:3)

问题“为什么使用HTTP上的Observable” 依赖于错误的假设,即它们是做同一件事的替代方法。是苹果和橘子;可观察对象提供了一种进行和处理HTTP操作的方法(一种工具)。这有点像问“为什么要在碗米饭上用叉子?” 叉子只是帮助处理米饭的工具;它们不是/或选项。

我认为,更大的问题是:

  

“在HTTP调用中,可观察流有什么用,我所需要的只是在需要时一次获得我的数据?”

这是一个更有趣的问题。的确,在大多数简单情况下,基于基本Promise的方法(例如本机fetch API)就足够了,但是它也有缺点。我现在可以想到的Observables的最大优点是:

  • 可观察对象更容易编写和融合到现有逻辑流中:假设我的应用程序需要对初始HTTP调用的结果做出明智的反应;例如,我可能想要动态地进行另一个呼叫,或者在给定条件的情况下跳过第二个呼叫,或者在延迟后重试原始呼叫,等等。。。这些事情将花费更多的复杂性和更多的代码来实现promise。建立可观察对象时要考虑逻辑流。
  • 当您关心的不仅仅是最终结果时,可观察性更适合:假设我的应用程序需要在文件上载或下载时向用户提供反馈。基于Promise的方法不能很好地工作,因为Promise只能解析一次,而Observable流可以发出进度事件。

答案 1 :(得分:0)

只需使用Angular HttpClient服务,您将使用使用RxJs observables构建的http客户端。

您可以将其注入您的服务

constructor(http: HttpClient)

并像使用它

this.http.get('URL to your endpoint');

您需要订阅以触发http请求。在观察者订阅可观察对象之前,创建冷可观察对象不会有任何数据流。

启动Angular时会尽可能多地了解RxJ,Angular是RxJ的强大构建,您应该在学习Angular之前先学习RxJ。