订阅做什么,以及它与Observable的关系如何?

时间:2017-10-16 10:15:04

标签: angular rxjs observable rxjs5

我是Angular的新手,我所遵循的教程中使用了术语" Observable"。导师对此进行了解释,但我并不完全理解。

什么是Observable,为什么我们总是要拨打observable.subscribe()

subscribe()实际上做了什么?

2 个答案:

答案 0 :(得分:6)

什么是Observable

可以将Observable视为数据源。该数据可能存在(或不存在),并且可能随时间而变化(或不存在)。

Observable发出数据,直到它没有任何内容可以发出然后完成(有一些Observable永远不会完成)或抛出异常(错误处理是Observable组合的重要部分)。

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

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

热与冷Observable

有两种Observables:冷和热。

  • Cold Observables :那些是在您订阅数据之前不会发出数据的Observable,基本上,在您要求数据之前数据不存在(例如Ajax请求)。
  • 热门观察:如果有用户在等待数据,这些就会开始无需照顾。

大多数情况下,您必须处理冷Observable(AJAX请求),这就是您需要订阅它们的原因,如果没有此订阅,您只需定义数据源,然后永远不会触发请求。

因此,让我们用视频比喻来考虑Observable

  • 感冒Observable就像VOD服务:视频会在您要求时播放(subscribe())。
  • 热门Observable就像普通电视一样:视频是在不考虑任何人要求的情况下播放的。

ConnectableObservable:变暖Observable s

什么? ConnectableObservable?你说只有两种Observable。你是个骗子!

不是真的; ConnectableObservableObservable,只要您调用connect()方法,就会发出数据。换句话说,只要您调用connect()方法,此Observable就会变热。

您可以使用某些操作符(例如Observable)将感冒ConnectableObservable变为publish()

答案 1 :(得分:0)

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

所以你需要学习的是反应式编程的工作原理。在一个回复中解释它太复杂了,但你有很多关于rxjs的内容。

我读到的第一篇文章是The introduction to Reactive Programming you've been missing,我认为这是对反应式编程的一个很好的介绍。