使用 SubSink 而不是 Subscriptions 数组有什么意义

The*_*ult 18 observable rxjs typescript rxjs6

我刚刚观看了 John Papa 的 ngConf 视频,将 SubSink 作为取消订阅可观察对象的最佳实践。

我实际上是在使用 Subscriptions[] 然后将订阅推送到其中然后 forEach 在 cmp destroy 取消订阅。

我错过了他们的东西还是只是使用 SubSink 的可读性改进?

Sho*_*ogg 21

另一种不安装第三方库的方法是使用 .add() 方法将订阅分组

export class CustomerComponent implements OnInit, OnDestroy {
  constructor(
    private dataService: DataService
  ){}

  private subs = new Subscription();

  ngOnInit() {
    this.subs.add(this.dataService.getCustomer().subscribe());
    this.subs.add(this.dataService.getProducts().subscribe());
  }

  ngOnDestroy() {
    this.subs.unsubscribe();
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 这就是答案。无需子接收器,该功能已在订阅中。还是后来才放的?您可以使用在销毁时取消订阅的订阅来构建基础组件。然后继承每个其他组件中的组件并将订阅添加到该基本订阅。你完成了。 (4认同)
  • 要使用 subsing 需要安装第三方库“npm install subsink”。我不想安装这个库,学习它(即使它是一个非常简单的库)如果我可以在没有这个 subsink 库的情况下得到我想要的东西 (4认同)

Jul*_*ius 12

采用这种方式至少有一个好处 - 您可以将此代码移到应用程序逻辑之外。因为退订只是清理(必须)。它与您在应用程序中创建的逻辑无关。

更进一步,您可以省略ngOnDestroy组件并创建一个带有已NgOnDestroy实现的适配器并将所有逻辑放置在那里。

import { OnDestroy } from '@angular/core';
import { SubSink } from './sub-sink';

/**
* A class that automatically unsubscribes all observables when 
* the object gets destroyed
*/
export class UnsubscribeOnDestroyAdapter implements OnDestroy {

/**The subscription sink object that stores all subscriptions */
subs = new SubSink();

/**
* The lifecycle hook that unsubscribes all subscriptions 
* when the component / object gets destroyed
*/
ngOnDestroy(): void {
   this.subs.unsubscribe();
}
Run Code Online (Sandbox Code Playgroud)

如何自动取消订阅你的 RxJs observables

除此之外,它是一个非常小的包,只有几行代码。感谢分享 :)