2017-12-06 30 views
1

HttpClientでエラーが発生した後にコードを実行する方法と少し苦労しています。 httpが失敗したときにローディングスピナーをオフにするフラグを設定する方法を知りたいと思います。 私は幸せなパスで5角度HttpClientのエラー処理

private fetch(): Observable<LegalTerm[]> { 

    this.isLoading = true; 
    return this._http 
       .get<LegalTerm[]>(AppSettings.LegalTermUrl, { withCredentials: true }) 
       .do(() => this.isLoading = false) 
       .catch<any, LegalTerm>(this._trace.handleError) 
       .do(() => this.isLoading = false) 
    } 

のでisLoading = false作品をRxJs 5.5.2と角度を使用しますがcatch後にそれを行う方法がわからないのです。コードが現在のように動作していません。私はまた、あなたが完全/エラーイベントにfalseにフラグを変更するfinally演算子を使用することができアンギュラドキュメント

public handleError<T>(operation = 'operation', error: any, result?: T) { 
    // do logging etc 
    return Observable.of(result as T); // return empty result 
} 
+0

見つけることができます。 –

+0

'.catch (this._trace.handleError)'は遅かれ早かれあなたを噛んでしまうコードです。修理する。 –

答えて

2

ごとにカスタムエラーハンドラを使用しています。

次のようにこれを行うことができます。オペレータについて

import { BehaviorSubject }from 'rxjs/BehaviorSubject'; 
import 'rxjs/add/operator/finally'; 

@Component() 
export class FooComponent { 
    private loadingSub$ = new BehaviorSubeject<boolean>(false); 
    loading$ = this.loadingSub$.asObservable(); 

    constructor(private fooService: FooService){ 
    } 

    fetch(){ 
    this.loadingSub$.next(true); 
    this.fooService.getData() 
    // notice that getData() returns a stream that isnt infinite 
    .finally(()=>this.loadingSub$.next(false)) 
    .subscribe(fooData => console.log(fooData)); // error handling not considered 
    } 
} 

@Injectable() 
export class FooService { 
    constructor(private http: HttpClient){} 

    getData(): Observable<any>{ 
     // error handling not considered 
     return this.http.get('foourl'); 
    } 
} 

詳細情報は、あなたが `HttpInterceptor`を使用する必要がありますhere

+0

'import 'rxjs/add/operator/finally';'私は必要なものです、ありがとう! – Anand

関連する問題