Rxjs-清除订阅者退订后的观察结果

时间:2019-08-09 08:25:30

标签: javascript rxjs

我正在使用一个不支持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

可以在不将主题传递给函数的情况下完成此操作吗?

1 个答案:

答案 0 :(得分:0)

好,找到答案了。 observer.add()允许您添加订户退订时的拆卸功能。因此,在我的情况下,这可行:

    return new Observable(observer => {

        const stream = someLibrary.getStream();        
        const request = stream.begin(); 
        observer.add(() => request.abort());
    })