在Angular的后端响应中创建隐藏的自定义错误

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

我正在编写Angular8应用程序,其中服务器始终给出200s系列答案。服务器端的所有错误都包装在Response object内,因此,我必须从中创建错误。

一个典型的答案如下;其中APP_CODE属性表示答案的运行状况,APP_CODE: '001'表示我可以从结果数组读取它。如果是APP_CODE="002"APP_CODE="002",则有错误,我应该读取错误数组,等等。

{ "input": null, 
  "warningMessages": [],
  "errorMessages": [
     "Please enter at least 3 characters"
  ],
  "numFound": 0,
  "results": [],
  "APP_CODE": "003"
}

解决方案策略:我可以使用几种策略,但是我想要的一种策略是使用map中的pipe处于服务级别,然后生成特定于应用程序的错误,然后将其传递给catchError()决定如何以烤面包或以某种形式显示它。

因此代码应该看起来像这样

private handleError(error: MyAppError) {
    console.log('******got you inside handleError', error);
    return throwError(error);
  }

private handleErrorAppCodes(res: any[]) {
    console.log('**** handleErrorAppCodes ****');
    console.log("%o", res);
    if (res["APP_CODE"] === "003") {
    console.log('dataAccess service| Results APP_CODE is', res["APP_CODE"]);
    return throwError(new MyAppError('APP CODE 3:' + res["errorMessages"][0]));
  } 
}
  return res;
}


getMyObject(objectName: string):Observable<any[]> {

let url = 'thisIsAUrl';

return this.http.get<any[]>(url).pipe(
  map(this.handleErrorAppCodes),
  catchError(this.handleError)
);

似乎是下降错误。但是在编译过程中出现以下错误

error TS2322: Type 'Observable<any[] | Observable<never>>' is not assignable to type 
'Observable<any[]>'.Type 'any[] | Observable<never>' is not assignable to type 'any[]'.
Type 'Observable<never>' is missing the following properties from type 'any[]': length, pop,  
push,concat, and 25 more.

我也尝试过map(res => this.handleErrorAppCodes(res))的编译错误是相似的。

后来我尝试了map<any[]>(this.handleErrorAppCodes)但我得到了

error TS2558: Expected 2 type arguments, but got 1.
angular observable angular-httpclient rxjs6 rxjs-pipeable-operators
1个回答
0
投票

您好要赋予地图运算符param与您的处理程序输入一样的形状

map((res: any[]) => this.handleError(res));

© www.soinside.com 2019 - 2024. All rights reserved.