我正在尝试在 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 HTTP 客户端。
Angular HTTP 客户端 API 创建 cold Observables。这意味着只要没有 subscription 源就不会发送请求。
combineLatest
和 map
运营商不订阅源。他们只是创建新的 Observables,只要它们的源是冷的,它们仍然是冷的。
而不是
pipe
+ map
,尝试在subscribe
的返回值上调用combineLatest
。这应该触发发送请求。
例如:
combineLatest([...])
.subscribe([op, fi,va, can]) => { ... }));
警告:你应该确保你的 订阅最终被取消订阅,否则你可能会以内存泄漏告终! 处理这个问题的最好方法是不要直接订阅 Observables,而是使用 async 管道将它们暴露给模板 .这样,Angular 将为您管理订阅生命周期。