2017-03-08 27 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))