我需要依次执行两个HTTP调用,但是在第二个HTTP调用之前,必须使用第一个HTTP的结果执行操作。
我认为使用concat
就足够了,但是据我观察,在第二个HTTP调用之后执行了对第一个HTTP的操作。
但是,使用concatMap
的代码是按照我期望的顺序执行的,但是我不得不忽略concatMap
调用中先前可观察到的结果。
我不是哪里有区别,我希望concat
像concatMap
会在我不需要以前的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();