2016-09-14 18 views
7

Tôi có một câu hỏi về lớp ErrorHandler mới (được đưa vào RC.6).ErrorHandler trong Angular2

tôi đã làm ví dụ từ tài liệu chính thức: 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 {} 

Sau khi tôi thay đổi nội dung tập tin app.module tôi

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

Bây giờ MyErrorHandler bắt lỗi:

throw new Error("my test error"); 

Nhưng nó doesn không nhận được các lỗi http như: "GET http://example.com/rest/user 401 (Không được phép)". Ai có thể giải thích cho tôi không?

Cảm ơn trước!

Trả lời

5

Nói rõ 401 (hoặc bất kỳ điều gì khác cho vấn đề đó) không chính xác là lỗi. Nó chỉ là một mã trả về HTTP. Bạn cần tự xử lý nó nếu mã như vậy phá vỡ chức năng ứng dụng của bạn. Nhưng có những lỗi thực sự như lỗi kết nối mà tôi cũng muốn biết cách xử lý. Dưới đây là câu hỏi của tôi về nó: Angular 2 http service. Get detailed error information

10

Để xử lý lỗi HTTP, thêm một nhà điều hành .catch() đến quan sát

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

Chức năng sẽ được gọi khi cuộc gọi http trả về mã trạng thái trong 4-500s. Từ đó bạn có thể ném lỗi như bạn muốn

handleHTTPError(res:Response){ 
    throw new Error("HTTP error: "+res.statusText+" ("+res.status+")"); 
} 
+5

Có cách nào để xử lý lỗi HTTP với Xử lý/dịch vụ lỗi tùy chỉnh không? Lý do tôi yêu cầu là vì tôi có nhiều dịch vụ và nhiều người trong số họ có các cuộc gọi HTTP. Tôi muốn có thể khai báo một phương thức 'handletHTTPError' – Kosmonaft

Các vấn đề liên quan