为什么Angular为HttpClient使用Observable?

Nam*_*mit 12 observable angular angular-observable

根据https://angular.io/tutorial/toh-pt6

通常,observable可以随时间返回多个值.来自HttpClient的observable总是发出一个值,然后完成,永远不会再次发出.

确实如此,一旦请求完成,Http请求/响应就不能再生成任何值.那么HTTPClient在发出请求时返回Observable的主要原因是什么?这只是因为我们可以在Observable上应用大量的运算符(重试,去抖等)吗?或者我有什么其他特殊原因吗?

max*_*992 11

你会发现最好的答案是Pascal Precth在2015年12月提出的专题问题上解释说:"Observables对于http有什么意义吗?" (但随意阅读,大量额外的答案也非常好!)

最重要的是:
- 重试
- 取消
- 享受所有Rxjs操作符
- 将它们组合成流的可能性
- 在整个应用程序中反应性思考
- 一致性
- Observables本质上是冷的,不需要像Promises一样将它们包装到工厂函数中如果你想稍后触发它


Rea*_*lar 5

Observable 是 Angular 框架中的标准异步处理程序。

按照标准,我的意思是异步管道、路由守卫、路由解析器、组件事件发射器和许多其他地方都支持 observable。

Angular 团队付出了很多努力来支持承诺作为其中许多功能的后备,但在幕后,这些承诺无论如何都只是转换为可观察的。

通过使 Http 请求可观察,Angular 团队使核心中的异步操作与其他地方的所有内容保持一致。

observables 仍然比 promises 有一些优势,但这主要是自以为是(就像我自己的观点)。

  • 您可以轻松地在服务中混合使用 Http 请求和 WebSocket,并将 API 公开为可观察对象。服务的消费者不会知道其中的区别。
  • 您可以轻松地将数组的 Http 请求转换为单独发出每个项目的 observable。这使得向不同的消费者分发数据变得更加容易。
  • 当 Promise 没有正确链接时,它们可能会中断。这些常见的错误通常可以通过 observable 来避免。