2017-03-08 41 views
1

示例代码:。首先()操作会影响其他订阅

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)运营商,在某种程度上第一签约太受到它的影响,并停止获取值。

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

回答

2

目前库中的一个bug,当你使用一个空(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({}) 
+0

谢谢。这解释了奇怪的Rx行为。 –

0

看起来像使用.subscribe()而没有任何回调会改变.first()运算符的行为。

如果我通过任何next回调.subscribe()方法,.first()运营商将正常工作。

例如,在secondSub变化

.subscribe() 

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