Rxjs 返回两个按顺序运行的可观察对象的第一个结果

Kar*_*ine 5 sequential observable rxjs angular

我需要顺序运行两个可观察值并仅返回第一个可观察值的结果。第二个可观察对象需要第一个可观察对象在运行之前完成。

我找到了解决方法,但我不满意。你可以在这里测试它: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));
Run Code Online (Sandbox Code Playgroud)

我认为(并且我希望!)存在更好的解决方案,但我找不到它。在此先感谢您的帮助。

Pac*_*ace 2

我在脑子里翻译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); });
Run Code Online (Sandbox Code Playgroud)

它实际上与您发布的内容没有什么不同,但直观上对我来说更有意义,因为我不会开始考虑操作concat

更新:

我想你也可以做...

const test = first.delayWhen(() => second.mapTo(0));
Run Code Online (Sandbox Code Playgroud)

...但我不确定这是否更具可读性。