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

问题描述 投票:1回答:1

我在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个标签创建了4个separate service,我没有这个问题。即使我要更改标签,所有数据都是正确的,然后才能获得最后一个标签的响应。

angular typescript rxjs kendo-grid
1个回答
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>;
           }));
}
© www.soinside.com 2019 - 2024. All rights reserved.