简化RxJS中的嵌套订阅

时间:2016-05-23 22:18:54

标签: javascript rxjs

我有两个可观察者

clients$是客户端连接流

data$是一个无休止地传递数据的流

每当客户端连接时,我都会订阅data$并将其发送给客户端。

我读到嵌套订阅在RxJS中是不行的,所以这种方法可能是错误的。

const clients$ = createClientStream()
const data$ = Observable.interval(1000).share()

clients$.subscribe(c => {

  const s = data$.subscribe(d => c.send(d))

  c.on('disconnect', () => s.unsubscribe())

})

对此有什么惯用的RxJS方法?

1 个答案:

答案 0 :(得分:2)

您可以使用flatMap

const clients$ = createClientStream()
const data$ = Observable.interval(1000).share()

clients$
  .flatMap(c => {
     const disconnect$ = Rx.Observable.create (observer => {
       c.on('disconnect', () => {observer.onNext({}); observer.onCompleted();})
     })
     return data$.takeUntil(disconnect$)
  }, (c,d) => c.send(d))