我试图检查从Web服务返回的错误类型。问题是instanceof
检查不起作用。 if
没有工作。
触发对WS的调用的组件类方法:
public performSearch(keyword: string) {
this.searchService.searchWithQuery(keyword)
.subscribe(
response => {
this.searchResults = JSON.parse(response._body);
},
(error: AppError) => {
console.log('error instance');
console.log(error);
if (error instanceof NotFoundError) {
this.snackBar.open('404 Not Found', 'X', {
duration: 5000,
});
}
if (error instanceof AccessDeniedError) {
this.snackBar.open('401 Access Denied', 'X', {
duration: 5000,
});
}
if (error instanceof BadInputError) {
this.snackBar.open('400 Bad Input', 'X', {
duration: 5000,
});
}
if (error instanceof AppError) {
this.snackBar.open('General Error', 'X', {
duration: 5000,
});
}
});
}
扩展基本服务类的search.data.service类:
searchWithQuery(query: string) {
let headers = new Headers();
headers.append('Authorization', 'Bearer ' + this.tokenValue);
return this.http.get(this.gatewayUrl + this.serviceName + this.withQuery + query, {
headers: headers
})
.catch(this.handleError);
}
private handleError(error: Response): ErrorObservable {
if (error.status === 404)
return Observable.throw(new NotFoundError(error.json()));
if (error.status === 400)
return Observable.throw(new BadInputError(error.json()));
if (error.status === 401) {
return Observable.throw(new AccessDeniedError(error.json()));
}
return Observable.throw(new AppError(error.json()));
}
AppError.ts类
export class AppError {
constructor(public originalError?: any) {
}
}
其余的错误类只是扩展它,例如:
export class AccessDeniedError extends AppError {
}
当我尝试记录error
的{{1}}时,我在控制台中得到了这个非常奇怪的内容:
AppError
答案 0 :(得分:2)
正如错误消息所示,错误不是上述问题,而是TypeError
,这是因为没有Observable.throw
方法。
除非使用import 'rxjs/Rx'
导入整个RxJS包,否则应显式导入throw
,与任何其他RxJS运算符或可观察方法一样:
import 'rxjs/add/observable/throw';
在TypeScript编译期间应该检测到这种错误,因此不需要在运行时调试它们。