2017-04-27 36 views
1

我有兩個可觀察到的one$two$;rxjs - 有沒有像第一個運算符那樣等待?

我希望one$只有在兩個$被激發至少一次時纔會觸發。我認爲這基本上是skipUntil運營商。

one$.skipUntil(two$).subscribe() 

但是,假設one$已經解僱而two$沒有。我想要一個行爲,其中流記得one$已經發射並且至少會發射一次,只要two$做了。

乾杯

回答

1

這看起來像您可以使用zip()運營商發出只有當所有的源觀測量已經發出n個項目n個項目:

const one$ = Observable.from(['a1', 'a2', 'a3'], Scheduler.async); 
const two$ = Observable.from(['b1'], Scheduler.async); 

Observable.zip(one$, two$, (v1, v2) => v1) 
    .subscribe(val => console.log(val)); 

我加入Scheduler.async只模擬異步行爲(更多信息參見combineLatest behaviour in Rxjs 5?

這將打印到控制檯:

a1 

只有當您知道one$只會發出一次時,這才行。

最終,您可以使用combineLatest(),它需要所有的源觀測站發射至少一個項目,然後發射任何發射,您可以忽略帶選擇器功能的two$

const one$ = Observable.from(['a1', 'a2', 'a3'], Scheduler.async); 
const two$ = Observable.from(['b1', 'b2'], Scheduler.async); 

Observable.combineLatest(one$, two$.take(1), (v1, v2) => v1) 
    .subscribe(val => console.log(val)); 

我們知道,我們只是想從two$的第一個項目,其餘的可以忽略不計。
這將打印到控制檯:

a1 
a2 
a3 
相關問題