Angular + RxJS:使用 takeUntil 与简单取消订阅?
Posted
技术标签:
【中文标题】Angular + RxJS:使用 takeUntil 与简单取消订阅?【英文标题】:Angular + RxJS: use of takeUntil vs simple unsubscribe? 【发布时间】:2018-07-31 00:53:09 【问题描述】:我在组件中遇到以下代码。
private _destroy$ = new Subject<null>();
// ...
ngOnInit()
this.someStream$
.pipe(filter(a=> a !== null), takeUntil(this._destroy$))
.subscribe(a => );
ngOnDestroy()
this._destroy$.next();
this._destroy$.complete();
谷歌搜索这件事给了我one contrasted opinion 关于声明式代码与命令式的信息,后者受到反应式架构的青睐。
考虑到这一点,我的问题是:与我一直处理相同案例的方式(用 sn-p 波纹管说明)相比,除了声明式代码和命令式代码之外,还有其他方面吗?另外,当takeUntil's
谓词完成时,如何确认第一种方法最终取消订阅?
private _subscription: Subscription = null;
// ...
ngOnInit()
this._subscription = this.someStream$
.pipe(filter(a=> a !== null) )
.subscribe(a => );
ngOnDestroy()
this._subscription && this._subscription.unsubscribe();
从
【问题讨论】:
见***.com/questions/42490265/…和***.com/questions/45333939/…和***.com/questions/40563065/… 我认为,假设您有多个订阅并且需要手动控制所有订阅,那么使用takeUntil
方法是处理它的好方法。关于如何确认takeUntil
如何工作的第二个问题,您可以阅读源代码,或创建简单的间隔流,然后在一段时间后与takeUntil
结合。
@TiepPhan:这不是takeUntil
工作原理的基本概念问题。它是关于细节的:它真的取消订阅,还是只是停止转发项目?这比创建一个简单的流更难测试
【参考方案1】:
显然,takeUntil 将向订阅方发送“完成”信号,使其完成。这会导致取消订阅。
【讨论】:
以上是关于Angular + RxJS:使用 takeUntil 与简单取消订阅?的主要内容,如果未能解决你的问题,请参考以下文章
在 Angular 6 中使用 rxjs 可观察对象的目的是啥?与 async/await 相比,rxjs 的优势是啥? [复制]
Angular:如何使用 RXJS 6 调用 finally()