2 votes

Désinscription de React to rxjs

J'essaie d'envelopper une API basée sur des événements avec des Observables RXJS, mais je n'arrive pas à trouver comment faire le ménage après une désinscription.

C'est à peu près la façon dont je synchroniserais l'abonnement avec l'Observable et l'API basée sur les événements :

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?
        })
    }
}

Le problème ici est qu'à un moment donné dans le futur, je veux appeler eventService.unregisterListener par exemple, lorsque le consommateur de streamOfSomething$ se désabonne du flux.

La question : Comment dois-je m'y prendre ? D'après ce que je sais, il n'y a pas d'événement ou de callback que je puisse utiliser dans mon observer pour exécuter du code après un désabonnement.

2voto

vivek kumar Points 1014
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(); };
        })
    }
}

La fonction que vous retournerez sera appelée lorsque l'utilisateur appellera la fonction unsubscribe().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X