我在Subject
类上使用subscribe()
方法订阅了Subject
。要取消订阅,我看到两个选项,因为unsubscribe()
和Subject
类都可以使用Subscription
方法。
Subscription
方法返回的subject.subscribe()
ngOnInit() {
this.subscription = this.subject.subscribe(next => nextHandler(), err => errHandler());
}
ngDestroy() {
this.subscription.unsubscribe();
}
unsubscribe()
方法,例如subject.unsubscribe()
ngOnInit() {
this.subject.subscribe(next => nextHandler(), err => errHandler());
}
ngDestroy() {
this.subject.unsubscribe();
}
退订的正确方法是什么。
答案 0 :(得分:2)
我知道的唯一区别是,在使用MyService
时,它不会触发管道运算符创建的任何处置处理程序。
Subject.unsubscribe()
这将永远不会将import { Subject } from 'rxjs';
import { finalize } from 'rxjs/operators';
const subject = new Subject();
const subscription = subject
.pipe(
finalize(() => console.log('done')),
)
.subscribe();
subject.unsubscribe();
// subscription.unsubscribe();
打印到控制台,因为done
仅删除所有观察者。 https://github.com/ReactiveX/rxjs/blob/master/src/internal/Subject.ts#L105
使用Subject.unsubscribe()
时将触发subscription.unsubscribe()
的处理程序,这可能是更可预测的行为。
答案 1 :(得分:1)
将主题设为新闻纸,它将每天向您发送一系列事件,并且订阅与用户订阅有关。
Subject.unsubscribe()
当您这样做时,您实际上是要销毁报纸本身,因此您不应该这样做。
Subscription.unsubscribe()
当您执行此操作时,您只是取消订阅您已订阅的订阅。不是来源(主题)。