.first() 运算符影响其他订阅

.first() operator affects other subscriptions

示例代码:

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() 会改变 .first() 运算符的行为。

如果我在 .subscribe() 方法中传递任何 next 回调,.first() 运算符将正常工作。

例如,在secondSub中更改

.subscribe()

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

当您将空 (undefined) 与 subscribe() 一起使用时,库中目前存在错误。

此问题正在解决: 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({})