簡體   English   中英

angular2 http.post到一個關閉的服務器=>在Android上返回錯誤但不在IOS上

[英]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);

}

此外,它需要在類的頂部添加一些特定的導入來使用函數timeoutWithObservable.throwimport 'rxjs/add/operator/timeoutWithimport 'rxjs/add/observable/throw就像官方解釋的那樣Angular2 doc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM