typescript - 用 RxJS 依次执行 observable,concat vs concatMap
问题描述
我需要按顺序执行两个 HTTP 调用,但在第二个调用之前,必须使用第一个调用的结果执行操作。
我认为使用concat
就足够了,但从我能够观察到的第一个 HTTP 上的操作是在第二个 HTTP 调用之后执行的。
然而,使用concatMap
代码是按照我期望的顺序执行的,但我必须忽略concatMap
调用中前一个 observable 的结果。
我不知道区别在哪里,我希望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();
解决方案
推荐阅读
- excel - 对于每个循环中的 cell.activate:运行时错误“1004”:Range 类的激活方法失败
- datediff - 在 Snowflake 中获取相当于 MONTHS_BETWEEN() 的 Impala
- java - 在 Debian 10 中执行 Java 时遇到问题
- javascript - 反应:在状态中引用函数时出错
- java - 应返回字符串中连续重复 3 次的字母数量,而不使用正则表达式...仅使用核心概念
- wordpress - 在 WP_Query 中修改 DATE
- c# - 嵌套对象属性上的 C# OrderBy
- mysql - Merge the values of several rows into a single field
- instagram - Instagram 视频中的 HEVC (x265) 编码?
- android - Gradle Multiproject vs Android 风格