我需要退订Observable.of吗?

时间:2019-04-28 19:42:05

标签: typescript rxjs

因此,基本上,这是rxjs的新手,并且想知道,

我需要取消订阅Observable.of(data)还是在较新的rxjs版本中,仅订阅(data)?

import {of} from 'rxjs';
const sub = of(data).subscribe();

这是必要的吗?

sub.unsubscribe();

2 个答案:

答案 0 :(得分:5)

article中最好地描述了有限的和无限的Observable。

有限的可观察物

在特定的可预见时间范围内完成,例如网络请求或您的Observable.of()通话。

无限的可观察物

可能永远不会完成,例如观察点击事件。

答案

虽然实际上没有必要取消有限可观察项的订阅,但是取消订阅每个可观察项被认为是最佳实践,因为您通常并不真正知道它是否确实是有限的。

为了避免在代码中堆积多个订阅,最好使用高级rxjs功能,如本article所示。

为什么我要退订Observable

Observable是事件流。您可以订阅此视频流并在该视频流使用subscribe函数生成事件时获取更新

.subscribe(
  onNext => {
    // Called if there was a normal event, e.g. data is emitted
  },
  onError => {
    // Called if there was an Error
  },
  onComplete => {
    // Called if the event stream ends OR an Error is encountered
  }
)

每个订阅都占用内存空间,只要Observable尚未完成,订阅就不会终止(但是即使使用了onNext()-Function,该订阅仍然会收到更新,即使该组件在销毁)。 为了防止意外行为和内存泄漏,您必须退订。 Click to read more

答案 1 :(得分:1)

关于RxJS的更具体的答案是您不要取消订阅of,因为它是一个Observable,它在完成发送给您的complete值时会发出next通知。

例如,对于此Observable of(1),通知的顺序如下:

  1. next通知,其值为1
  2. complete通知,通知订阅者该源Observable已发出任何内容。
收到Subscriber个通知后,

complete个对象会自动退订: