任何需要先取消订阅 RxJS()

Posted

技术标签:

【中文标题】任何需要先取消订阅 RxJS()【英文标题】:Any need to call unsubscribe for RxJS first() 【发布时间】:2018-09-15 22:32:48 【问题描述】:

在以下代码中:-

RxJS.Observable.of(1,2).first().subscribe((x) => console.log(x););

给定运营商first(),是否需要取消订阅?

【问题讨论】:

【参考方案1】:

first() 将在 observable 发出第一项后完成。

另外subscribe() 接受三个参数,最后一个是完整的回调。运行以下代码将输出 1 后跟 'done'。

Rx.Observable.of(1)
  .subscribe(
  (x) => console.log(x),    // next
  (x) => console.error(x),  // error
  () => console.log('done') // done
)

【讨论】:

【参考方案2】:

对于提供的示例,您不需要unsubscribe,也不需要调用first,因为Observable.of(1) 在发出其第一个(也是最后一个)值后实际上完成

【讨论】:

已更改为 1,2 但您的答案仍然正确,因为您提到它完成。【参考方案3】:

没有。拨打first()后自动退订。 RxJS 6 的当前语法是 observable.pipe(first()).subscribe(func);

documentation 声明:

如果不带参数调用,first 会发出源 Observable 的第一个值,然后完成。

【讨论】:

认为您缺少) :) 当源 observable 从不发出值时会发生什么,这是否意味着 Subscription 停留在那里并可能造成内存泄漏? @Gagan 是的,它会造成内存泄漏。 那么这种情况下如何添加退订呢?

以上是关于任何需要先取消订阅 RxJS()的主要内容,如果未能解决你的问题,请参考以下文章

RxJS:取消订阅嵌套订阅

取消订阅 RxJS Observables

取消 rxjs 中的 http 订阅

RxJS 迁移 5 到 6 - 使用 TakeUntil 取消订阅

取消订阅 Rxjs Observables

RxJS迁移5到6 - 取消订阅TakeUntil