前言
之前在项目中用到了forkJoin,用来处理多个异步http请求完成后执行回调函数,今天在处理将路由参数快照更改为参数订阅问题时,看到使用combineLatest,就学习整理一下
1.forkJoin
- 在进行http请求时,forkJoin与combineLatest并没有什么区别,因为http请求只会执行一次就结束。
- 用forkJoin合并的请求,只会触发一次subscribe里的回调函数。
- 会在所有异步请求执行完之后,触发一次subscribe里的回调函数。
2. combineLatest
- 用combineLatest合并的请求,可以触发多次subscribe里的回调函数
- 代码(示例)如下:
combineLatest(
this.activatedRoute.params,
this.activatedRoute.queryParams
).subscribe(results => {
const params = results[0];
const queryParams = results[1];
this.activatedId = queryParams.activatedId;
this.getProject(params.code, this.activatedId);
});
- 上述代码中,
将this.activatedRoute.params
看做请求1,
将this.activatedRoute.queryParams
看做请求2,
combineLatest合并请求, 一开始会等请求1请求2都执行成功调用subscribe里的回调函数,但是在合并时,如果请求1在等待请求2时又执行了一次,那么就使用请求1的最新数据来进行合并,之后每当有请求执行获取新数据,都会以最新数据来合并,进而调用subscribe里的回调函数