如果我的课程主题在其生命中发出单一值:
export class MyClass {
myEmitter$: Subject<void> = new Subject();
someMethod(){
this.myEmitter$.next();
this.myEmitter$.complete();
}
}
然后在另一个班级:
this.instanceOfMyClass.myEmitter.subscribe();
我应该取消订阅instanceOfMyClass.myEmitter$
,因为主题在发出后完成了吗?
答案 0 :(得分:3)
当您在主题上致电complete
时,任何订阅者都将自动取消订阅。
如果您查看主题complete
method的来源:
complete() {
if (this.closed) {
throw new ObjectUnsubscribedError();
}
this.isStopped = true;
const { observers } = this;
const len = observers.length;
const copy = observers.slice();
for (let i = 0; i < len; i++) {
copy[i].complete();
}
this.observers.length = 0;
}
您会看到主题在每个观察者身上调用complete
。 Observable Contract表示:
当Observable向其观察者发出[error]或[complete]通知时,这将结束订阅。观察者不需要以这种方式发出[取消订阅]通知来结束由Observable结束的订阅。