RxJS - 组合两个 HTTP GET 并行请求
RxJS - Combine Two HTTP GET Parallel Requests
我需要建议。我对 RxJS 很陌生,所以我想正确使用它。
我需要从 API 获取两个不同的数组。我只想在两者都完成时才完成此操作,因为我需要将它们发送给子组件(子组件有两个不同的列表框,它们相互依赖)。
我想将这些 Observable 存储在:
departments$: Observable<IDepartment[]>;
workers$: Observable<IWorker[]>;
这个问题的解决方案:
departments$ = this.http.get<string[]>('api/departments')
.pipe(
tap(data => console.log(JSON.stringify(data))),
catchError(this.handleError)
);
workers$ = this.http.get<string[]>('api/workers')
.pipe(
tap(data => JSON.stringify(data))),
catchError(this.handleError)
);
departmentsAndWorkers$ = forkJoin({
departments$: this.departments$,
workers$: this.workers$
})
.pipe(
tap(data => console.log(JSON.stringify(data))),
catchError(this.handleError)
)
您正在寻找 forkJoin
RxJS 运算符。当所有请求完成时,它将发出一个元组值。阅读更多相关信息:https://www.learnrxjs.io/learn-rxjs/operators/combination/forkjoin
您可以像这样尝试使用 forkJoin :
forkJoin([departments$,workers$]).subscribe((resp: any) => {
// resp[0] : departments$
// resp[1] : workers$
},
errors=>{
}
});
您可以使用 forkJoin:等待 Observables 完成,然后合并它们发出的最后一个值;如果传递空数组,则立即完成。
https://rxjs.dev/api/index/function/forkJoin
或 combineLatest:每当任何输入 Observable 发出一个值时,它都会使用所有输入的最新值计算一个公式,然后发出该公式的输出。
https://rxjs.dev/api/index/function/combineLatest
我需要建议。我对 RxJS 很陌生,所以我想正确使用它。 我需要从 API 获取两个不同的数组。我只想在两者都完成时才完成此操作,因为我需要将它们发送给子组件(子组件有两个不同的列表框,它们相互依赖)。
我想将这些 Observable 存储在:
departments$: Observable<IDepartment[]>;
workers$: Observable<IWorker[]>;
这个问题的解决方案:
departments$ = this.http.get<string[]>('api/departments')
.pipe(
tap(data => console.log(JSON.stringify(data))),
catchError(this.handleError)
);
workers$ = this.http.get<string[]>('api/workers')
.pipe(
tap(data => JSON.stringify(data))),
catchError(this.handleError)
);
departmentsAndWorkers$ = forkJoin({
departments$: this.departments$,
workers$: this.workers$
})
.pipe(
tap(data => console.log(JSON.stringify(data))),
catchError(this.handleError)
)
您正在寻找 forkJoin
RxJS 运算符。当所有请求完成时,它将发出一个元组值。阅读更多相关信息:https://www.learnrxjs.io/learn-rxjs/operators/combination/forkjoin
您可以像这样尝试使用 forkJoin :
forkJoin([departments$,workers$]).subscribe((resp: any) => {
// resp[0] : departments$
// resp[1] : workers$
},
errors=>{
}
});
您可以使用 forkJoin:等待 Observables 完成,然后合并它们发出的最后一个值;如果传递空数组,则立即完成。 https://rxjs.dev/api/index/function/forkJoin
或 combineLatest:每当任何输入 Observable 发出一个值时,它都会使用所有输入的最新值计算一个公式,然后发出该公式的输出。 https://rxjs.dev/api/index/function/combineLatest