7

新しいクラス ErrorHandler (RC.6 に含まれていた) について質問があります。

公式ドキュメントから例を挙げました: https://angular.io/docs/ts/latest/api/core/index/ErrorHandler-class.html

import{ErrorHandler} from "@angular/core";
import{NgModule} from "@angular/core";
export class MyErrorHandler implements ErrorHandler {

    call(error: any, stackTrace: any = null, reason: any = null) {
        // do something with the exception
        console.log("do something with the exception");
    }

    // I handle the given error.
    public handleError( error: any ): void {
        console.log("I handle the given error");
    }

}
@NgModule({
    providers: [
        {
            provide: ErrorHandler,
            useClass: MyErrorHandler
        }
     ]
})
export class MyErrorModule {}

app.module ファイルを編集した後

import {MyErrorHandler} from "./error.module";
import {MyErrorModule } from "./error.module";
..
@NgModule({
    imports: [
        MyErrorModule
    ....
    ],
    ...
    providers: [MyErrorHandler]
   ....

MyErrorHandler がエラーをキャッチするようになりました。

throw new Error("my test error");

ただし、「GET http://example.com/rest/user 401 (Unauthorized)」のような http エラーは検出されません。誰か説明してくれませんか?

前もって感謝します!

4

2 に答える 2

10

.catch()HTTP エラーを処理するには、オブザーバブルにオペレーターを追加します

return this.http.get(url,options)
    .catch((res)=>this.handleHTTPError(res));

この関数は、http 呼び出しが 4-500 番台のステータス コードを返したときに呼び出されます。そこから、必要に応じてエラーをスローできます

handleHTTPError(res:Response){
    throw new Error("HTTP error: "+res.statusText+" ("+res.status+")");
}
于 2016-09-14T04:10:31.050 に答える
5

厳密に言えば、401 (またはそれ以外のこと) は厳密にはエラーではありません。これは単なる HTTP リターン コードです。このようなコードによってアプリケーションの機能が損なわれる場合は、自分で処理する必要があります。しかし、接続エラーのような実際のエラーもあり、その対処方法も知りたいです。それについての私の質問は次のとおりです 。Angular 2 http サービス。詳細なエラー情報を取得する

于 2016-09-14T03:54:25.257 に答える