2017-04-27 69 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 
相关问题