我有一些JavaScript:
this.mySubscription = someObservable.subscribe((obs: any) => {
this.mySubscription.unsubscribe();
this.mySubscription = undefined;
}
执行时,控制台记录错误ERROR TypeError: Cannot read property 'unsubscribe' of undefined
。
我想知道为什么我无法在subscribe Lambda函数内取消订阅。是否有正确的方法来这样做?我已经读了一些关于使用虚拟主题(dummy-subjects)并完成它们或使用takeUntil/takeWhile和其他管道操作的workArounds的文章。
有没有一种正确的方法或解决方法可以在订阅的subscribe函数内取消订阅?
我当前正在使用一个虚拟订阅,像这样:
mySubscription: BehaviorSubject<any> = new BehaviorSubject<any>(undefined);
// when I do the subscription:
dummySubscription: BehaviorSubject<any> = new BehaviourSubject<any>(this.mySubscription.getValue());
this.mySubscription = someObservable.subscribe((obs: any) => {
// any work...
dummySubscription.next(obs);
dummySubscription.complete();
dummySubscription = undefined;
}, error => {
dummySubscription.error(error);
});
dummySubscription.subscribe((obs: any) => {
// here the actual work to do when mySubscription emits a value, before it should have been unsubscribed upon
}, err => {
// if errors need be
});
takeWhile
应该适合你。 - frido