首页 > 解决方案 > 用 RxJS 依次执行 observable,concat vs concatMap

问题描述

我需要按顺序执行两个 HTTP 调用,但在第二个调用之前,必须使用第一个调用的结果执行操作。

我认为使用concat就足够了,但从我能够观察到的第一个 HTTP 上的操作是在第二个 HTTP 调用之后执行的。

然而,使用concatMap代码是按照我期望的顺序执行的,但我必须忽略concatMap调用中前一个 observable 的结果。

我不知道区别在哪里,我希望concatconcatMap不需要之前的 Observable 结果时使用它,但我只需要确保它已经结束了它的执行。

使用下面的代码片段,我得到的结果是

concatMap is working
do first http call
do something with http call result: 1
do second http call
concat is not working
do first http call
do second http call
do something with http call result: 1
import { Observable } from 'rxjs/Rx';


function first() {
    console.log("do first http call");
    return Observable.of(1).do(d => {
        console.log("do something with http call result:", d)
    });
}

function second() {
    console.log("do second http call");

    return Observable.of(3);
}

console.log("concatMap is working");
first().concatMap(_ => second()).subscribe();
console.log("concat is not working");
first().concat(second()).subscribe();

标签: typescriptrxjsobservable

解决方案


推荐阅读