[英]angular2 http.post to a turned off server => return error on Android BUT NOT ON IOS
我正在使用Angular 2,Ionic 2。
我关闭了我的应用发送请求的服务器,以便检查离线模式的管理方式。
我已根据import { Http, Headers, Response, RequestOptions, RequestMethod, Request } from '@angular/http'
为我的项目制作了自定义HTTP服务。 它包括'function sendRequest':
public sendRequest = (data):Observable<Response> => {
// console.log("CustomHttpService->sendRequest() starts");
let headersToUse = new Headers();
headersToUse.append("Content-type",'application/x-www-form-urlencoded');
data = this.jsonToURLEncoded(data);
let options = { headers:headersToUse };
return this.http.post(this.url, data, options).map(
(res:Response)=>{
return res.json();
}
).catch(
this.handleErrorObservable
);
}
'function handleErrorObservable':
private handleErrorObsevable (error:Response|any){
console.log("handleError error.message " + error.message);
console.log("handleError error " + error);
return Observable.throw(error.message || error);
}
在Android中它可以工作,在一段时间后我进入日志:
handleError错误URL状态为0的响应:null
但是在IOS上,错误永远不会到来,就像没有时间设置一样。 有小费吗?
我个人更喜欢使用@ angular / http的这个fomart来处理错误,它始终有效。
this.http.post(url, data)
.map(res => res.json())
.subscribe((data) => {
// Use returned data
},
(err) => {
// Handle the error here
});
即使服务器处于脱机状态, (err)
部分也可以帮助处理所有与网络相关的错误。 希望这可以帮助。
我在我的函数中通过在observable中添加自定义超时设置来解决它,就像在SO问题中一样。 现在看起来像这样:
public sendRequest = (data):Observable<Response> | Observable<any> => {
// console.log("CustomHttpService->sendRequest() starts");
let headersToUse = new Headers();
headersToUse.append("Content-type",'application/x-www-form-urlencoded');
data = this.jsonToURLEncoded(data);
let options = { headers:headersToUse };
return this.http.post(this.url, data, options).timeoutWith(CustomHttpService.TIMEOUT_DELAY,Observable.throw(new Error(CustomHttpService.ERROR_REQ_HTTP))).map(
(res:Response)=>{
return res.json();
}
)
.catch(this.handleErrorObservable)
}
private handleErrorObservable (error:Response|any){
console.error(CustomHttpService.CLASS_TAG + " handlerErrorObservable: error.message " + error.message);
return Observable.throw(error.message);
}
此外,它需要在类的顶部添加一些特定的导入来使用函数timeoutWith
和Observable.throw
: import 'rxjs/add/operator/timeoutWith
并import 'rxjs/add/observable/throw
就像官方解释的那样Angular2 doc 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.