告诉我在订阅线程中使用取消订阅线程的后果。在我公司的项目中,我看到以下结构:
let sub = method().subscribe(() => {
sub.unsubscribe();
...
})
我看到它很糟糕,但我无法解释为什么它很糟糕。帮助塑造思想。
告诉我在订阅线程中使用取消订阅线程的后果。在我公司的项目中,我看到以下结构:
let sub = method().subscribe(() => {
sub.unsubscribe();
...
})
我看到它很糟糕,但我无法解释为什么它很糟糕。帮助塑造思想。
这没有什么可怕的,但它并不完全是 RxJS 风格的。
如果 observable 发出多个结果,而您只需要一个,那么您通常会这样做
为什么更好?好吧,至少这样你就不需要创建闭包了。对于其他 RxJS 程序员来说,这段代码看起来更干净。
这是来自主要 RxJS 贡献者之一的相关文章https://medium.com/@benlesh/rxjs-dont-unsubscribe-6753ed4fda87
如果您确定订阅者是异步调用的,那么这将起作用。
但是如果有同步调用的可能,那么这个变量
sub
还不会被初始化,当你尝试取消订阅的时候,会发生一个异常,会丢弃整个订阅函数,并且取消订阅本身永远不会被调用,永远不会.为什么不在 ngOnDestroy 期间发出一些 Subject 并在订阅前编写 .pipe(takeUntil(this.unsubscribe)).subscribe() ?(这里 this.unsubscribe 是同一个主题)