我正在使用一个不支持rxjs的库,只是很好的回调。我正在尝试将其包装成可观察的形式,但是当有人取消订阅时,我需要内部流来处理自身。
subscribeToQuotes() {
return new Observable(observer => {
const stream = someLibrary.getStream();
stream.onNewData(data => {
observer.next(data);
});
stream.onComplete(() => observer.complete());
const request = stream.begin();
//I need to call request.abort() when subscriber unsubscribes
})
}
我想这样使用:
const onInstrumentChanged = new Subject();
onInstrumentChanged.subscribe(instrument => {
this.subscribeToQuotes(instrument)
.pipe(takeUntil(onInstrumentChanged))
.subscribe(quotes => {
...
})
})
subscribeToQuotes()
可以被多次调用,而takeUntil()
会丢弃先前的订阅,但是内部流会不断触发。我需要在内部致电request.abort()
。
当主题request.abort()
被触发时,我该如何呼叫onInstrumentChanged
?
可以在不将主题传递给函数的情况下完成此操作吗?
答案 0 :(得分:0)
好,找到答案了。 observer.add()
允许您添加订户退订时的拆卸功能。因此,在我的情况下,这可行:
return new Observable(observer => {
const stream = someLibrary.getStream();
const request = stream.begin();
observer.add(() => request.abort());
})