Реагировать на rxjs отписаться - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь обернуть основанный на событиях API с помощью RXJS Observables, но я не могу понять, как убирать за собой после отмены подписки.

Это почти то же самое, что и синхронизацияподписка с помощью Observable и API, основанного на событиях:

interface SomeEventService{
    registerListener(messageName: string, messageContent: Something): Listener;
    unregisterListener(listener: Listener);
}

class MyWrapper {
    private eventService: SomeEventService;

    streamOfSomething$(): Observable<Something> {
        return Observable.create((observer: Observer<Something>) => {
            // Create a listener, and relay events to the Observable
            const listener = this.eventService.registerListener("something", something => {
                observer.next(something);
            })
            // Now what?
        })
    }
}

Проблема здесь в том, что когда-нибудь в будущем я захочу позвонить на eventService.unregisterListener, например, когда потребитель streamOfSomething$ откажется от подпискииз потока.

Вопрос: Как мне это сделать?Насколько я могу судить, на моем observer нет события или обратного вызова, которые я могу использовать для запуска кода после отмены подписки.

1 Ответ

0 голосов
/ 11 октября 2018
class MyWrapper {
    private eventService: SomeEventService;

    streamOfSomething$(): Observable<Something> {
        return Observable.create((observer: Observer<Something>) => {
            // Create a listener, and relay events to the Observable
            const listener = this.eventService.registerListener("something", something => {
                observer.next(something);
            })
            // Now what?
             return () => { this.eventService.unRegisterListener(); };
        })
    }
}

функция, которую вы вернете, будет вызвана, когда пользователь вызовет функцию unsubscribe ()

...