forkJoin 或 rxjs 的 combineLatest 不调用 api 服务

问题描述 投票:0回答:1

我正在尝试在 forkJoin 或 combineLatest 中传递 api 调用,然后通过管道传输它们,最后将结果一一映射,以将它们的值分配给类级变量。

所有的 api 调用返回一个 observable


operator: any;
field: any;
value: any;
canonicalFields: any;
 
ngOnInit(): void {
 combineLatest([
 this.api.getoperators(),
 this.api.getFields(),
 this.api.getValues(),
 this.api.getCanonicalFields()])
 .pipe(
   map(([op, fi,va, can]) => {
    this.operator = op;
    this.field = fi;
    this.value = va;
    this.canonicalFields = can;
    console.log(op,fi,va,can);
   }));
}
angular typescript rxjs fork-join
1个回答
1
投票

这是正常行为,假设您使用的是 Angular HTTP 客户端。

Angular HTTP 客户端 API 创建 cold Observables。这意味着只要没有 subscription 源就不会发送请求。

combineLatest
map
运营商不订阅源。他们只是创建新的 Observables,只要它们的源是冷的,它们仍然是冷的

而不是

pipe
+
map
,尝试在
subscribe
的返回值上调用
combineLatest
。这应该触发发送请求。

例如:

combineLatest([...])
   .subscribe([op, fi,va, can]) => { ... }));

警告:你应该确保你的 订阅最终被取消订阅,否则你可能会以内存泄漏告终! 处理这个问题的最好方法是不要直接订阅 Observables,而是使用 async 管道将它们暴露给模板 .这样,Angular 将为您管理订阅生命周期。

© www.soinside.com 2019 - 2024. All rights reserved.