subscribe 做什么,它与 Observable 有什么关系?

What does subscribe do, and how it is related to Observable?

我是 Angular 的新手,我遵循的教程中有术语“Observable”。导师解释了,我没完全听懂

什么是 Observable,为什么我们总是要调用 observable.subscribe()

subscribe()实际上是做什么的?

Observable 独立于 Angular。它为您提供了一种处理异步流的便捷方式。 Angular 使用它。

所以你需要学习的是响应式编程是如何工作的。太复杂了,无法在一个回复中解释清楚,但是你已经掌握了很多关于 rxjs 的内容。

我最先读到的是这个 post The introduction to Reactive Programming you've been missing,我认为这是对响应式编程的一个很好的介绍。

什么是 Observable

一个Observable可以看作是一个数据源。该数据可能存在(或不存在)并且可能随时间变化(或不变化)。

一个 Observable 发射数据,直到它不再发射数据然后完成(有些 Observable 永远不会完成)或抛出异常(错误处理是 Observable 组合的重要组成部分)。

您可以组合这些数据源或使用 mapmergeswitchMap 等运算符更改发出的数据。因此,数据源可以是一种更改另一个数据源或许多其他数据源的组合。

正如我所说,Observable 是一个来源,如果你想使用来自该来源的数据,你需要 subscribe()Observable 然后你会收到通知发出的任何数据。

热与冷 Observable

有两种 Observable:冷的和热的。

  • Cold Observables:这些 Observables 在您订阅它们之前不会发出数据,基本上,数据在您请求之前不存在(例如 Ajax请求)。
  • Hot Observables:这些开始发射而不关心是否有订阅者在等待数据。

大多数时候,你必须处理冷 Observables(AJAX 请求),这就是你需要订阅它们的原因,没有这个订阅你只定义一个数据源,然后永远不会触发请求。

所以让我们用视频来比喻Observable

  • 感冒Observable就像一个VOD服务:当你要求时播放视频(subscribe())。
  • 热门 Observable 就像普通电视:播放视频时不考虑是否有人要求。

ConnectableObservable: 暖寒Observables

什么? ConnectableObservable?你说只有两种 Observable。你在说谎!

不是真的; ConnectableObservableObservable,只要您调用它们的 connect() 方法就会发出数据。换句话说,这个 Observable 会在你调用 connect() 方法后立即变热。

您可以使用一些运算符(例如 publish())将感冒 Observable 变成 ConnectableObservable