合并不同的数据以响应2请求

时间:2018-09-01 14:27:23

标签: angular typescript rxjs kendo-grid

我在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,但是我没有这个问题。所有数据都是正确的,即使我在获得响应的最后一个选项卡之前更改了选项卡。

1 个答案:

答案 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>;
           }));
}