4

トークンの追加を処理するクラスですべての http アクセスを処理するコードがいくつかあります。Observable を返します。そのクラスのエラー、特に認証の問題をキャッチしたい。私は RXjs の初心者であり、これを行う方法を理解できず、それでも Observable を返します。かなり包括的な rxJS 5 ドキュメント (ソース コードではありません!) へのポインタが役立つでしょう。

4

1 に答える 1

9

catchサービス内で HTTP 呼び出しを実行するときに、演算子を利用できます。

getCompanies() {
  return this.http.get('https://angular2.apispark.net/v1/companies/')
           .map(res => res.json())
           .catch(res => {
             // do something

             // To throw another error, use Observable.throw
             // return Observable.throw(res.json());
           });
}

別の方法として、HTTP オブジェクトを拡張してエラーをインターセプトすることもできます。

@Injectable()
export class CustomHttp extends Http {
  constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) {
    super(backend, defaultOptions);
  }

  request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
    console.log('request...');
    return super.request(url, options).catch(res => {
      // do something
    });        
  }

  get(url: string, options?: RequestOptionsArgs): Observable<Response> {
    console.log('get...');
    return super.get(url, options).catch(res => {
      // do something
    });
  }
}

以下のように登録します。

bootstrap(AppComponent, [HTTP_PROVIDERS,
    new Provider(Http, {
      useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) => new CustomHttp(backend, defaultOptions),
      deps: [XHRBackend, RequestOptions]
  })
]);

実際に何を使用するかは、ユースケースによって異なります...

于 2016-02-08T16:36:31.863 に答える