使用RxJS,concat和concatMap依次执行可观察的操作

时间:2019-10-04 13:05:49

标签: typescript rxjs observable

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

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

但是,使用concatMap的代码是按照我期望的顺序执行的,但是我不得不忽略concatMap调用中先前可观察到的结果。

我不是哪里有区别,我希望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();

0 个答案:

没有答案