2017-12-06 14 views
0

現状:httpエラーを処理する正しい方法は何ですか?

  1. 私はバックエンドでデータを保存service.tsています

    :私はすべての要求にトークンを追加することができますので、私は、HTTPのインターセプターを

    public update(route: string, values: Array<any>): Observable<boolean> { 
        let body = { values: values }; 
    
        return this.httpClient.put(route, body, { 
        observe: 'response' 
        }) 
        .map((res) => { 
        let status = res.status; 
        switch (status) { 
         case 202: 
          return true; 
        } 
        }, error => { 
        switch (error.status) { 
         case 406: 
          return false; 
        } 
        }); 
    } 
    
  2. を持っています

    public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { 
        return next 
        .handle(request) 
        .do(event => { 
    
        }) 
        .catch((error: any) => { 
    
        }); 
    } 
    
  3. と私は正常に結果が必要な保存メソッドを持つコンポーネントを持っています:

    public save(form: FormGroup) { 
        let path = '...'; 
        this.service.update(path, form.value) 
        .subscribe(result => { 
         // success 
        }, error => { 
         // fail 
        }); 
    } 
    

私は物事をまとめる方法を知らない。 コンポーネント内でsaveメソッドを起動し、コンポーネント内に結果(成功、エラー)が必要です。

今は私の傍受の結果しか取得できません。 これは間違った場所です。

答えて

1
public update(route: string, values: Array<any>): Observable<boolean> { 
    let body = { values: values }; 

    return this.httpClient.put(route, body, { 
    observe: 'response' 
    }); 
} 
// You don't need map for httpClient 

その後HttpInterceptorを実装するための正しい方法は次のとおりです。

public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { 
    return next.handle(request).do(
     (response: HttpEvent<any>) => { 
     // Do stuff with success 'response instanceof HttpResponse' 
     }, 
     (error: any) => { 
     // Do stuff with error 'error instance of HttpErrorResponse' 
     }); 
} 
+0

は、このように動作するようだ...ありがとう! – HansDampfHH

関連する問題