![](/img/trans.png)
[英]Angular 2 : Get 404 error in http.get call with Observable return
[英]Angular 2, can Http.get ignore 404
我需要使用 HTTP 库来检查服务器上是否存在文件。 这很简单,我所做的就是调用以下代码:
private serverHeadRequest(): Observable<any> {
return this.http.head("theFileName.xxx")
.map(this.isResponseOkCallBack)
.catch(this.handleError);
}
private isResponseOkCallBack(res: Response) {
switch (res.status) {
case 404:
return false;
case 200:
return true;
default:
return false;
}
}
private handleError(error: any) {
let errMsg = (error.message) ? error.message :
error.status ? `${error.status} - ${error.statusText}` : 'Server error';
console.error(errMsg); // log to console instead
return Observable.throw(errMsg);
}
如果响应是 200,则代码运行良好。 但是,我想在任何其他类型的响应代码上简单地返回 false。
我尝试将此作为替代错误处理程序,我认为如果出现错误,它只会返回 false,但这不起作用。
private handleError(error: any) {
return Observable.create()
.map({
return false;
});
}
我怎样才能让它工作? 有没有办法忽略某些状态代码?
试着认为你可以处理这样的错误:
// import 'rxjs/add/observable/of'
handleError() {
return Observable.of(false);
}
另外请注意,如果出现错误,浏览器仍会在控制台中打印HEAD <url> 404 (Not Found)
。 你不应该担心这个,最重要的是你正确处理它(但返回false
)。
当出现错误(在大多数非 2xx 响应中抛出)时,不会调用isResponseOkCallBack
,因为它会直接跳转到.catch()
块。
尝试将所有成功的请求映射为 true,将任何错误映射为 false。
this.http.head("theFileName.xxx")
.map(() => true) // or .map(res => (res.status === 200))
.catch(() => Observable.of(false));
这就是我最终做的:
serverHeadRequest(): Observable<any> {
return this.http.head('someFileName.xxx')
.map(this.isResponseOkCallBack)
.catch(this.handleHEADError);
}
private isResponseOkCallBack(res: Response) {
switch (res.status) {
case 404:
return false;
case 200:
return true;
default:
return false;
}
}
private handleHEADError(error: any) {
return Observable.of(this.isResponseOkCallBack);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.