.first()操作员会影响其他订阅



示例代码:

const test1$ = Rx.Observable.interval(1000)
const test2$ = Rx.Observable.interval(1000)
// This subscription need to get every value continuously
const firstSub = test2$
  .do(val => console.log('Service: ', val))
  .subscribe()
// This subscription need to get only first value and stop
const secondSub = Rx.Observable.combineLatest(test1$, test2$)
  .do(val => console.log('Method: ', val))
  .first()
  .subscribe()
  • 第一次订阅在应用启动之后立即开始。
  • 第二订阅由单击事件开始(因此可以运行几次)。

当我使用.first().take(1)操作员时,首先订阅也会受到它的影响,并停止获得值。

如何更改该行为以仍然从第一次订阅中获取值,而仅从第二个订阅中获得一个值并停止?

当您使用 subscribe()的空(undefined)时,库中当前有一个错误。

这是通过:https://github.com/reactivex/rxjs/pull/2238

与此同时,如果您这样更新代码,事情将按预期工作。

const test1$ = Rx.Observable.interval(1000)
const test2$ = Rx.Observable.interval(1000)
// This subscription need to get every value continuously
const firstSub = test2$
  .do(val => console.log('Service: ', val))
  .subscribe({})
// This subscription need to get only first value and stop
const secondSub = Rx.Observable.combineLatest(test1$, test2$)
  .do(val => console.log('Method: ', val))
  .first()
  .subscribe({})

看起来像使用.subscribe()没有任何回调更改.first()操作员行为。

如果我通过.subscribe()方法中的任何next回调,.first()操作员将正常工作。

例如,在secondSub中,更改

.subscribe()

to

.subscribe(test => console.log('Method: ', test))

相关内容

最新更新