RXJS Создать Observable для сокетов - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь вернуть Observable из службы, которая позволила бы вам прослушивать любой канал Pusher.

Работает нормально, ожидайте, что я бы хотел unsubscribe из канала-отправителя, когда Observable (сгенерированный с помощью createRealtimeObservable(...)) был отписан от подписки.

Есть идеи?

  public realtimeObservable (channelName, eventName): Observable<any> {

        const realtimeObservable$ = new Observable((observer) => {

          const channel = this.pusher.subscribe(`private-organization-${this.authService.userProfile.organization_id}-${channelName}`)
          channel.bind(eventName, (data) => {
            observer.next(data.payload)
          })

        })

        return realtimeObservable$
      }

1 Ответ

0 голосов
/ 05 июля 2018

Когда вы сами создаете Observable, вы несете ответственность за очистку всех ресурсов, когда отписались. К счастью, в Observable есть механизм для этого, позволяющий вам возвращать функцию отмены подписки / удаления при создании:

return Observable.create((obs) => {
  const channel = this.pusher.subscribe(`private-organization-${this.authService.userProfile.organization_id}-${channelName}`)
  channel.bind(eventName, (data) => {
    observer.next(data.payload)
  });

  return () => {
    // unsubscribe event
    channel.unsubscribe(); // NOTE: i do not know the syntax for unsubscribing a Pusher channel, impl as required.
  };
});

Примечание: Observable.create() является синтаксическим сахаром для new Observable()

...