0%

rxjs操作符 forkJoin

Observable可以使用subscribe来订阅,但是当遇到多个Observable有相互关系的时候,就有点微妙了。

现在的需求是,有N个请求,我们希望某几个请求先执行,后续请求是在前面请求执行完毕的基础上进行的。怎么办?

我们可以使用forkJoin操作符。

forkJoin操作符的作用类似于promise的promise.all()forkJoin操作符接收一个Observable对象列表,然后并行的执行他们。一旦列表的Observable对象都发出值后,forkJoin操作符返回的Observable对象会发出新的值,即包含所有的Observable对象输出值的列表。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
// tradeApi为包装的http服务。方法返回Observable。
const preApi$ = forkJoin([ this.tradeApi.baseTokenList(), this.tradeApi.merchantList()]);
preApi.subscribe((data) => {
if (data[0].code === ErrorCodeEnum.SUCCESS) {
this.baseTokenList = data[0].data;
}
if (data[1].code === ErrorCodeEnum.SUCCESS) {
this.merchantList = data[1].data.result;
// 默认选中第一个商户搜索
this.searchParams.appid = this.merchantList[0].appid;
}
this.getTradeList();
});

forkJoin操作符一个常见的用例是在页面加载(或其他事件)时,希望发起多个请求,并在所有的请求都响应后再采取行动。

码字辛苦,打赏个咖啡☕️可好?💘