我在Service
中创建了一个angular
,该请求向具有2个web-API
的服务或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个标签创建了4个separate
service
,但是我没有这个问题。所有数据都是正确的,即使我在获得响应的最后一个选项卡之前更改了选项卡。
答案 0 :(得分:1)
您可以使用switchMap代替map
上的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>;
}));
}