【问题标题】:What does subscribe do, and how it is related to Observable?subscribe 有什么作用,它与 Observable 有什么关系?
【发布时间】:2018-03-27 19:56:36
【问题描述】:

我是 Angular 的新手,我遵循的教程使用术语“Observable”。导师解释过,但我没完全明白。

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

subscribe() 究竟做了什么?

【问题讨论】:

标签: angular rxjs observable rxjs5


【解决方案1】:

什么是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。你是骗子!

不是真的; ConnectableObservables 是 Observables,只要你调用他们的 connect() 方法就会发出数据。换句话说,只要你调用connect() 方法,这个 Observable 就会变得很热。

您可以使用一些运算符(如publish())将冷的Observable 变成ConnectableObservable

【讨论】:

  • 他们为什么要创建subscribe() 方法? observable.subscribe(observer) 对我来说听起来很愚蠢。应该是add_observer(),不是吗?
  • 我想那是因为它提醒了现实生活:为什么我没有互联网连接?因为我没有订阅任何 ISP 报价。为什么这个冷的 observable 不发出数据?因为我没有订阅。
  • 是的,观察者应该订阅一个可观察对象。但是在这种情况下,动词 subscribe() 属于 Observable,而不是 Observer,这很奇怪。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-03-28
    • 2019-07-22
    • 2012-03-12
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    相关资源
    最近更新 更多