RXJS为套接字创建可观察的

时间:2018-07-04 18:43:09

标签: sockets rxjs reactive-programming pusher

我正在尝试从服务中返回一个Observable,该服务将允许您收听任何Pusher频道。

很好,希望取消订阅Observable(使用unsubscribe生成)时,我想从推送器通道中使用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 :(得分:1)

当您手动创建一个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.
  };
});

NB:Observable.create()new Observable()的语法糖