每当主题的最后一个订阅者退订时,我都需要运行一些清理代码。我该怎么做?
到目前为止,这是我所拥有的,但是在我看来,这并不是一个好方法。当然有reactive办法吗?
export class TestSubject<T> extends BehaviorSubject<T> {
protected _subscribe(subscriber: Subscriber<T>): Subscription {
const originalSubscription = super._subscribe(subscriber);
return new TestSubjectSubscription<T>(
this,
subscriber,
originalSubscription,
(observer) => this.registerUnsubscription(observer));
}
private registerUnsubscription(subscriber: Observer<T>) {
}
}
export class TestSubjectSubscription<T> extends SubjectSubscription<T> {
constructor(
subject: TestSubject<T>,
subscriber: Observer<T>,
private inner: Subscription,
private notifyUnsubscribed: (subscriber: Observer<T>) => void) {
super(subject, subscriber);
}
unsubscribe() {
this.inner.unsubscribe();
this.notifyUnsubscribed(this.subscriber);
}
}
Run Code Online (Sandbox Code Playgroud)
.finally()可用于在流完成后调用回调(错误/完成/取消订阅)