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));
我想一个更好的解决方案存在,但我不能找到它(我希望!)。 在此先感谢您的帮助。
答
我国内在我的脑海翻译flatMap
到then
所以我希望看到类似...
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));
...但我不知道这是更具可读性。
答
用户merge
与take(1)
:
Observable.merge(first, second).take(1).subscribe(x=>console.log(x));
+0
它仅返回第二个结果。这不是我想要的 – Karine
,我不认为有什么更好的办法来做到这一点。唯一的改进可能是使用'ev => second.mapTo(ev)'使其更加明显。 – martin