当前位置: 首页 > 知识库问答 >
问题:

接受(1)和取消订阅之间的差异[重复]

谢高峯
2023-03-14

假设我不使用异步管道。我想订阅component.ts文件中的一些内容。正如你所知,如果不是http请求,我应该取消订阅。

这是我试过的。

方法1)在那里实现破坏钩子和退订

方式2)订阅时,使用take(1)。take(1)将自行处理取消订阅。

我的问题是-为什么会有人选择方式1,当我们想退订时应该使用哪种方式(如果我们不需要异步管道)

共有1个答案

公冶谦
2023-03-14

答案与Angular的生命周期有关。

路1。实施OnDestroy挂钩并在那里取消订阅:

组件执行类似的操作,最有可能是在OnInit方法中。

this.myObservable$.pipe(takeUntil(this.unsubscribe)).subscribe(myValue => {
  // do something
});

您有一个相应的私有变量和OnDestroy生命周期挂钩来取消订阅:

private unsubscribe: Subject<void> = new Subject();

ngOnDestroy(): void {
  this.unsubscribe.next();
  this.unsubscribe.complete();
}

当您希望订阅在组件的生命周期内持续时,可以使用此选项。当你的可观察接收新值时,你的订阅将继续接收它们。

方式2。订阅时,使用ake(1)

this.myObservable$.pipe(take(1)).subscribe(myValue => {
  // do something
});

这种方式将采取从可观测的第一发射和退订。当然,如果值在该点之后更改,则不会通知您更改。

方法1将帮助您保持动态状态。假设您有一个菜单,并且您想要在该菜单上选择一个选项,您想要该组件在更改时更新,并且无论您需要做什么都非常复杂,您不能使用异步管道。此订阅将持续组件的生命周期。

根据你想做什么,你可能根本不需要订阅。相反,您可以使用rxjs操作符自动完成这项工作。参见https://brianflove.com/2017/11/01/ngrx-anti-patterns/例如。

 类似资料:
  • 我注意到以下代码在netbeans中是完全合法的: 然而eclipse对此并不满意,我必须这样初始化它: 有趣的是netbean建议不要在初始化部分指定类型参数,而是使用菱形运算符??我想知道这两种方法之间的区别。以及应该使用哪一种,这样代码就可以在不同的IDE中使用而不会有任何变化。

  • 两者的区别是什么 和 ? 第一个语句的输出是 [0 0…n次] 而第二个是 ([0] [0] .... n行)

  • 我想知道更多处理数组的numpy。我发现a[:,None]和a[:,]之间是不同的。我想深入研究何时何地使用它们。 我试图以特殊的方式解决从2d数组中减去1d的问题,就像numpy-subtract-add-1d-array-from-2d-array一样,我意识到a[:,None]和a[:,]是不同的。 有人能给我关于它的官方或具体参考吗?我真的会很感激你的!

  • 例如: 我是否需要取消订阅此订阅?我问这是因为我不知道Angular是否处理它本身。另外,请求是一次性的,而不是连续的。我倾向于认为我不需要。你有什么想法? 根据下面的帖子:Angular/RXJS,我什么时候应该取消订阅'subscription' RxJS处理一次性订阅,但我在他们的文档中没有找到任何东西。

  • 发送表单数据时使用命令名称和模型属性有什么区别? 和 我应该在哪个时间点使用它们中的任何一个?

  • 可能重复: 何时使用LinkedList 我应该什么时候使用arrayList,什么时候使用LinkedList? 什么时候应该使用,和?