Typescript 使用子链接而不是订阅数组有什么意义

Typescript 使用子链接而不是订阅数组有什么意义,typescript,rxjs,observable,rxjs6,Typescript,Rxjs,Observable,Rxjs6,我刚刚看了一段ngConf视频,约翰·帕帕在视频中谈到,为了取消订阅obversables,SubSink是一种最佳实践 我实际上是在使用订阅[],然后将订阅推入其中,然后在cmp destroy取消订阅 它们是我遗漏的东西,还是使用SubLink只是一种可读性改进?采用这种方式至少有一个好处——您可以将此代码移到应用程序逻辑之外。因为取消订阅只是一种清理(必须)。它与您在应用程序中创建的逻辑无关 再进一步,您可以从组件中省略ngondestory,创建一个实现了ngondestory的适配器,

我刚刚看了一段ngConf视频,约翰·帕帕在视频中谈到,为了取消订阅obversables,SubSink是一种最佳实践

我实际上是在使用订阅[],然后将订阅推入其中,然后在cmp destroy取消订阅


它们是我遗漏的东西,还是使用SubLink只是一种可读性改进?

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

再进一步,您可以从组件中省略
ngondestory
,创建一个实现了
ngondestory
的适配器,并将所有逻辑放在那里

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();
}


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

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


国际海事组织不得不扩展它,这使它变得不值得。仅通过扩展它,这意味着您应该始终记住在父组件中执行super.ngondstroy(如果您有ngondstroy逻辑),有一天您会忘记(泄漏)。默认情况下,扩展它不会让您扩展更多的东西,除非您有一些mixin架构或其他什么。我没有看到足够的价值来采用它。我做过一些Angular项目,不是我写的,也做过很多我自己的项目,到目前为止,我从未需要扩展组件或看到一个。也许对于UI组件可能有用,但除此之外,我从未遇到过这种情况。对于UI组件,我们可以使用
async
。所以对我来说,这完全没问题+如果需要用其他东西扩展组件,就不难回头,因为这项功能不太可能在功能中增长。关于忘记-取消订阅也可能被忘记:)在这里,你可以只忘记一个呼叫,而手动取消订阅,你可以忘记所有订阅,也可以只忘记少数订阅。是的,当然,忘记总是会发生:),但如果你继承了一些逻辑,就更容易了。我知道这一点,因为我在一个巨大的项目中工作,在这个项目中,组件/服务/类之间实际上发生了继承,我们面临着多个相关的问题。回退是很容易的,我同意,在类似的情况下,您最终会手动取消订阅,而不会继承UnsubscribeondstroyaAdapter,这是一个真实的故事。执行某种多重继承的成本和复杂性是不值得的,因为继承逻辑很少。子链接不错,但没有继承会更好。在小项目中,我可能会看到它的价值,因为它加快了组件的创建等,但在大项目中则不然。正如您所说,现在最完美/最干净的解决方案是尽可能使用异步管道。win lol的异步管道。这就是答案。不需要子库,该功能已在订阅中。还是放在船尾?您可以使用在销毁时取消订阅的订阅来构建基本组件。然后在每个其他组件中继承该组件,并向该基本订阅添加订阅。你完了。我真的觉得很难理解,而你们却不得不大肆使用subsink。这种方法是正确的,但在我看来,我认为补贴没有任何好处。根据您的说法,仍然需要在需要的其他每个组件中继承自定义组件,并将所有订阅添加到基本订阅中。这不正是subsink正在做的,而是更干净的吗@LlorençPujol Ferriol正确地指出,在任何项目中,您都可以随时使用async并根据需要退回到子库。要使用子库,需要安装第三方库“npm安装子库”。我不想安装这个库,如果我不需要这个子库就可以得到我想要的东西,那就学习它(即使它是一个非常简单的库)
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();
  }
}