【发布时间】:2023-03-24 13:02:01
【问题描述】:
我在组件中遇到以下代码。
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();
}
从
【问题讨论】:
-
我认为,假设您有多个订阅并且需要手动控制所有订阅,那么使用
takeUntil方法是处理它的好方法。关于如何确认takeUntil如何工作的第二个问题,您可以阅读源代码,或创建简单的间隔流,然后在一段时间后与takeUntil结合。 -
@TiepPhan:这不是
takeUntil工作原理的基本概念问题。它是关于细节的:它真的取消订阅,还是只是停止转发项目?这比创建一个简单的流更难测试