web-dev-qa-db-ja.com

Angular httpリクエストの監視可能なエラーはエラーをキャッチしませんか?

HttpClientを使用したAngular6。現在、インターセプターは実装されていません。

MSGraphへのhttp呼び出しを行う管理サービスがあります。この場合、通知ハンドラーに送信しているエラー400の不正な要求が発生します。

そのconsole.logをスライドして、エラーブロックがまったく発生していないことを確認し、別のcnosole.logをスライドして、サーバーから返される「データ」がエラーであるかどうかを確認しました。

Console.logsはいずれも起動しませんが、グローバルエラーハンドラーはコンソールに400の不正な要求応答を表示します。

この応答を使用して、ユーザーフレンドリーなメッセージを表示できるようにしたいと思います。

コード:

this.http.get(this.GRAPH_ROOT_URL + this.APP_ID, { headers }).subscribe(data => {
  this.notification.done(data);
  console.log(data);
}), error => {
  this.notification.error(`Error getting users from Microsoft GRAPH API. Reason: ${error}`)
  console.log("this is observable error", error);
}
4
MichaelB

Angular6はRxJS6を使用しており、多くの変更が加えられています。それがあなたが使用しているものであると仮定すると、これは私が使用するものです:

これが私が使うものです:

this.http.get(this.GRAPH_ROOT_URL + this.APP_ID, { headers })
    .pipe(catchError(err => {
      this.alert.error('There was an error getting data');
      return throwError(err);
    })).subscribe(data => this.notification.done(data));

したがって、pipeを使用してcatchErrorを呼び出します。これにより、サーバーエラーが正しく処理されます。

catchErrorを使用するには、次のように最初にインポートする必要があります。

import { catchError } from 'rxjs/operators';
6
Cobus Kruger