gpt4 book ai didi

javascript - RxJS Observable forkJoin 不并行执行

转载 作者:行者123 更新时间:2023-12-04 15:10:18 26 4
gpt4 key购买 nike

我有以下代码,在我的一生中,无法弄清楚为什么请求不会同时执行。我对 RxJS 和 observables 还是个新手,所以如果能帮助我改进下面的代码,我将不胜感激。基本上,我在后端调用 REST API 以获取一些数据。然后,对于该数据数组中的每个元素,我都会向不同的端点发出另一个请求(因此使用“forkJoin”运算符)。所有的请求都是一次发送的,但它们似乎仍然一个接一个地执行,而不是同时执行。

this.sites$.subscribe(data => {

// data.forEach(element => {
// this.siteCaptureMap[element.id] = new CaptureData();

// this.sitesService.getCaptureData(element.nameOrNumber, element.owner.name).subscribe(data => {
// this.siteCaptureMap[element.id].count = data.length;
// });
// });

var obs: Observable<any>[] = [];
for (var _i = 0; _i < data.length; _i++) {
this.siteCaptureMap[data[_i].id] = new CaptureData();
this.siteCaptureMap[data[_i].id].id = _i;
obs.push(this.sitesService.getCaptureData(data[_i].nameOrNumber, data[_i].owner.name));
}

forkJoin(obs).subscribe(results => {
for (var _i = 0; _i < results.length; _i++) {
this.siteCaptureMap[data[_i].id].count = results[_i].length;
}
});


this.dataSource.data = data;
this.dataSource.filteredData = data;
});

同样,我们将不胜感激任何帮助。如果我需要澄清任何内容或提供任何其他代码片段,请告诉我!谢谢!

最佳答案

嵌套的 subscribe 会导致内存泄漏,并且很难取消订阅,所以当你嵌套了 subscribe 时,想想 switchMapconcatMapmergeMap

它们都有微小的变化,但它们从以前的可观察对象切换到新的可观察对象。这post解释差异。

对于你,我会尝试做:

import { switchMap } from 'rxjs/operators';

...
this.sites$.pipe(
switchMap(data => {
let obs: Observable<any>[] = [];
for (let _i = 0; _i < data.length; _i++) {
this.siteCaptureMap[data[_i].id] = new CaptureData();
this.siteCaptureMap[data[_i].id].id = _i;
obs.push(this.sitesService.getCaptureData(data[_i].nameOrNumber, data[_i].owner.name));
}

return forkJoin(obs);
}),
).subscribe(results => {
for (let_i = 0; _i < results.length; _i++) {
this.siteCaptureMap[data[_i].id].count = results[_i].length;
}

this.dataSource.data = data;
this.dataSource.filteredData = data;
});

旁注是使用 letconst 而不是 var

此外,如果您看到所有请求同时发出,那是您所希望的。如果它连续返回,则可能是浏览器或服务器导致的。

关于javascript - RxJS Observable forkJoin 不并行执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65293143/

26 4 0
文章推荐: java - Keycloak:调用管理员 rest api 时无法将用户领域角色读取为管理员 cli
文章推荐: javascript - 如何在 React + Material-UI 元素中使用 CSS?
文章推荐: python - SODA API 未返回数据集中的所有字段
文章推荐: javascript - 子元素在shadow dom中的使用