angular - 合并不同的数据以响应 2-request
问题描述
我Service
在angular
该服务请求中创建了一个,或者web-API
有 2 个method
类似:
query(state: any, url: string, param?: any): void {
url = this.baseUrl + url;
this.isBusy.value = true;
this.fetch(url, state, param)
.subscribe((x) => {
this.isBusy.value = false;
this.view = x;
}
);
}
fetch(url: string, state: any, param?: any): Observable<GridDataResult> {
state.dontShowSnak = true;
let params = new HttpParams();
if (param != null) {
params = params.append('param', param);
}
return this.http
.post(url, state, {params: params})
.map(response => (<GridDataResult>{
data: response['result']['items'],
total: parseInt(response['result']['totalCount'], 10)
}));
}
该服务是全球性的,所有应用程序都可以使用它。
现在!我有一个带有 4 个标签的页面。当页面启动时,第一个选项卡正在加载,如果我将更改选项卡并转到第二个选项卡(在获得第一个选项卡的响应之前),在第二个选项卡中,我将有第一个选项卡的响应或数据。为什么?
问题出在哪里?有问题kendo
吗?还是我的service
?
- 我和我一起工作
Kendo-grid
但是现在我更改了我的service
并创建 4 separate
service
for 4 选项卡,我没有这个问题。即使我将更改选项卡,所有数据都是正确的,然后才能获得最后一个选项卡的响应。
解决方案
您可以使用switchMap而不是map
on http.post()
。这将终止正在进行的请求(从 tab1 启动)并创建一个新Observable
的要为第二个选项卡发出的请求。这样您现在只能获取第二个选项卡的数据。
import { switchMap } from 'rxjs/operators';
fetch(url: string, state: any, param?: any): Observable<GridDataResult> {
......................
return this.http
.post(url, state, {params: params})
.switchMap(response => { // using switchMap
return Observable.of ({
data: response['result']['items'],
total: parseInt(response['result']['totalCount'], 10)
}) as Observable<GridDataResult>;
}));
}
推荐阅读
- python - 给定两个字符串数组,对于列表中的每个字符串,确定它在另一个列表中有多少个字谜。如何提高时间效率?
- python - 为什么我不能遍历 get_queryset 中的对象?
- c++ - 如何在 Windows 上将 std::vector 固定/取消固定到实际的、未压缩的硬件内存?
- azure - 自动续订期间是否会克隆 keyvault 标签?
- numpy - 不等式的最小二乘线性规划
- algorithm - 线性代数,几何。点积的值为 0
- swift - Swift GCD:为什么信号处理程序在函数中不起作用
- scala - 使用枢轴旋转单行 Spark 数据框
- python - 如何模拟在类属性中调用的函数?
- python - Python:通过行中的非零值获取列名