Я пишу приложение Angular8, где сервер всегда дает ответы серии 200-х годов. Все ошибки со стороны сервера заключены в 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.