如何在Angular中编写单个post服务并多次动态调用它?

时间:2018-08-17 08:03:53

标签: javascript angular rxjs angular5 observable

下面是两个不同的get调用,但我只想创建一个。

getDashBoardDetails(userId): Observable<DashboardTo> {
    let keys = this.crmBaseUrl + apiCall.gnGetDashBoardDetails + "?createdBy=" + userId;;
    //let keys = apiCall.organisationMaster2;
    return this.http
        .get(keys)
        .map((res: Response) => res)
        .catch((error: any) => Observable.throw(error || "Server error"));
}

getDealerDashBoardDetails(): Observable<DealerDashboardTo> {
    let keys = this.crmBaseUrl + apiCall.gnGetDealerDashBoardDetails
    return this.http
        .get(keys)
        .map((res: Response) => res)
        .catch((error: any) => Observable.throw(error || "Server error"));
}

3 个答案:

答案 0 :(得分:1)

为什么不这样简单:

getDashBoardDetails(userId): Observable < DashboardTo > {
    let keys = this.crmBaseUrl + apiCall.gnGetDashBoardDetails + "?createdBy=" + userId;
    this.makeCall(keys).subscribe(res => ... )
}

getDealerDashBoardDetails(): Observable < DealerDashboardTo > {
    let keys = this.crmBaseUrl + apiCall.gnGetDealerDashBoardDetails;
    this.makeCall(keys).subscribe(res => ... )
}

makeCall(keys){
    return this.http
        .get(keys)
        .map((res: Response) => res.json() ) // should be res.json(), not res
        .catch((error: any) => Observable.throw(error || "Server error"))
}

答案 1 :(得分:0)

好吧,您可以创建一个名为IDashboard的接口,并在DealerDashboardToDashboardTo中实现该接口

然后只需按以下方式创建此方法:

getDetails(userId?): Observable<IDashboard> {
  let urlEnd = userId ? `${apiCall.gnGetDashBoardDetails}?createdBy=${userId}` : apiCall.gnGetDealerDashBoardDetails;
  let keys = this.crmBaseUrl + urlEnd;
  return this.http
    .get<IDashboard>(keys)
    .map((res: Response) => res)
    .catch((error: any) => Observable.throw(error || "Server error"));
}

我确定这不是一个完整的答案。但这是我所能提供的最好的信息。

此外,不确定为什么要在.map上进行.get

答案 2 :(得分:0)

我不确定您的确切目标是什么,但是我认为以下两种方法都可以帮助您

let keys1 = this.crmBaseUrl + apiCall.gnGetDashBoardDetails + "?createdBy=" + userId;;
 let keys2 = this.crmBaseUrl + apiCall.gnGetDealerDashBoardDetails

    forkJoin([keys1, keys2]).subscribe(results => {

       var keys1Result = results[0];
     var keys2Result = results[1];

    });

或通过接受参数Url创建可重用的方法

getDashboardDetails(url:string){
          return this.http
        .get(url)
        .map((res: Response) => res)
        .catch((error: any) => Observable.throw(error || "Server error"));
}