Rxjs返回依次运行的两个可观察对象的第一个结果

Rxjs返回依次运行的两个可观察对象的第一个结果

问题描述:

我需要依次运行两个可观察对象并仅返回第一个可观察对象的结果。第二个观察者需要首先在跑步之前完成。Rxjs返回依次运行的两个可观察对象的第一个结果

我发现了一种解决方法,但我并不满意。你可以在这里进行测试:plunker test

const first = Observable.of(10).delay(1000).do(res => console.log('first')); 
const second = Observable.of(20).do(res => console.log('second')); 
console.log('start'); 
const test = first.concatMap(ev => second.map(x=> ev)).subscribe(res => 
console.log(res)); 

我想一个更好的解决方案存在,但我不能找到它(我希望!)。 在此先感谢您的帮助。

+1

,我不认为有什么更好的办法来做到这一点。唯一的改进可能是使用'ev => second.mapTo(ev)'使其更加明显。 – martin

我国内在我的脑海翻译flatMapthen所以我希望看到类似...

const first = Observable.of(10).delay(1000).do(res => console.log('first')); 
const second = Observable.of(20).do(res => console.log('second')); 
const test = first.flatMap(rsp => { return second.mapTo(rsp); }); 

这是不是真的比你张贴的内容不同,但它会使我更有意义直觉上,因为我不会开始考虑concat操作。

更新:

我想你也可以做......

const test = first.delayWhen(() => second.mapTo(0)); 

...但我不知道这是更具可读性。

+0

这两个条目的工作,但我希望比'second.mapTo'更干净。 – Karine

+0

你可以随时编写自己的操作符或静态函数。称它为缓冲区或延迟直到什么。 – Pace

用户mergetake(1)

Observable.merge(first, second).take(1).subscribe(x=>console.log(x)); 
+0

它仅返回第二个结果。这不是我想要的 – Karine