我正在编写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.
您好要赋予地图运算符param与您的处理程序输入一样的形状
map((res: any[]) => this.handleError(res));