我正在尝试按照Angular guide向服务添加一些错误处理。
相关摘要:
private handleError (error: Response | any) {
// In a real world app, you might use a remote logging infrastructure
let errMsg: string;
if (error instanceof Response) {
const body = error.json() || '';
const err = body.error || JSON.stringify(body);
errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
} else {
errMsg = error.message ? error.message : error.toString();
}
console.error(errMsg);
return Observable.throw(errMsg);
}
但是,我收到了一个TypeScript错误:
error TS2339: Property 'error' does not exist on type '"" | Promise<any>'.
Property 'error' does not exist on type '""'.
我可以理解为什么正在发生 - error.json()
返回Promise<any>
,然后body.error
的后续行无效,因为没有{ {1}}财产。但是,似乎应该期望从error
返回JSON对象。为什么会这样,而我错过了Angular指南不是什么?
答案 0 :(得分:25)
同样的事发生在我身上。无法导入Response对象时会发生这种情况。
import { Response } from '@angular/http';
答案 1 :(得分:0)
不,因为你写了:
,它不会起作用const body = error.json() || '';
这意味着body
可以是空字符串,而字符串不具有error
属性。
这应该更好:
const body = error.json() || { error: null };
哦,error.json()
会返回Promise
,这意味着您无法使用此同步块,而是您需要:
error.json().then(body => {
if (!body) {
body = "";
}
const err = body.error || JSON.stringify(body);
const errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
});
答案 2 :(得分:0)
我有同样的问题,我终于找到了这个解决方案。
.catch(error => {
let errMsg: string;
const body = JSON.parse(error._body);
if (body) {
errMsg = body.error
} else {
errMsg = error.message ? error.message : error.toString();
}
console.error(errMsg);
return Promise.reject(errMsg);
});
&#13;