Angular ErrorHandler传递了不正确的数据 //api.service.ts 公共Get(slug:string):可观察{ 返回this.http.get(`${environment.apiBaseURL}/${this.endPoint}/${slug}`).pipe( 映射(数据=>this.serializer.fromJson(数据)为T) ); } //global-error-handler.ts 从“@angular/core”导入{Injectable,ErrorHandler}; 从“@angular/common/http”导入{HttpErrorResponse}; @注射的({ providedIn:'根' }) 导出类GlobalErrorHandler实现ErrorHandler{ handleError(错误:任意){ if(HttpErrorResponse的错误实例){ log('类型为HttpErrorResponse'); } 其他的 { log('type is Error'); } } } //app.module.ts { 提供:ErrorHandler, useClass:GlobalErrorHandler, }

Angular ErrorHandler传递了不正确的数据 //api.service.ts 公共Get(slug:string):可观察{ 返回this.http.get(`${environment.apiBaseURL}/${this.endPoint}/${slug}`).pipe( 映射(数据=>this.serializer.fromJson(数据)为T) ); } //global-error-handler.ts 从“@angular/core”导入{Injectable,ErrorHandler}; 从“@angular/common/http”导入{HttpErrorResponse}; @注射的({ providedIn:'根' }) 导出类GlobalErrorHandler实现ErrorHandler{ handleError(错误:任意){ if(HttpErrorResponse的错误实例){ log('类型为HttpErrorResponse'); } 其他的 { log('type is Error'); } } } //app.module.ts { 提供:ErrorHandler, useClass:GlobalErrorHandler, },angular,angular-errorhandler,Angular,Angular Errorhandler,具有subscribe的组件的错误将error返回为HttpErrorResponse(这是预期的类型。但是,来自解析程序的错误将error返回为error类型 当错误源于解析程序时,自定义错误类型将丢失,并且只返回通用的错误类型。如果只调用Get而不返回catchError呢 //api.service.ts public Get(slug: string): Observable<T> { return this.http.get(`${environment.apiBa

具有
subscribe
的组件的错误将
error
返回为
HttpErrorResponse
(这是预期的类型。但是,来自解析程序的错误将
error
返回为
error
类型


当错误源于解析程序时,自定义错误类型将丢失,并且只返回通用的
错误类型。

如果只调用Get而不返回catchError呢

//api.service.ts
public Get(slug: string): Observable<T> {
    return this.http.get(`${environment.apiBaseURL}/${this.endPoint}/${slug}`).pipe(
        map(data => this.serializer.fromJson(data) as T)
    );
}



//global-error-handler.ts
import { Injectable, ErrorHandler } from '@angular/core';
import { HttpErrorResponse } from '@angular/common/http';

@Injectable({
    providedIn: 'root'
})
export class GlobalErrorHandler implements ErrorHandler {
    handleError(error: any) {

        if (error instanceof HttpErrorResponse) {
            console.log('type is HttpErrorResponse');
        }
        else
        {
            console.log('type is Error');
        }
    }
}


//app.module.ts
{
    provide: ErrorHandler,
    useClass: GlobalErrorHandler,
}

如果在没有catchError的情况下调用Get呢

//api.service.ts
public Get(slug: string): Observable<T> {
    return this.http.get(`${environment.apiBaseURL}/${this.endPoint}/${slug}`).pipe(
        map(data => this.serializer.fromJson(data) as T)
    );
}



//global-error-handler.ts
import { Injectable, ErrorHandler } from '@angular/core';
import { HttpErrorResponse } from '@angular/common/http';

@Injectable({
    providedIn: 'root'
})
export class GlobalErrorHandler implements ErrorHandler {
    handleError(error: any) {

        if (error instanceof HttpErrorResponse) {
            console.log('type is HttpErrorResponse');
        }
        else
        {
            console.log('type is Error');
        }
    }
}


//app.module.ts
{
    provide: ErrorHandler,
    useClass: GlobalErrorHandler,
}
基于。当冲突解决程序抛出错误时,它将得到一个被拒绝的错误。因此,您将丢失原始错误。下面的代码修复了该问题

@Injectable()
export class GlobalErrorHandler implements ErrorHandler {

    handleError(error: any): void {
        if (error.status === 404) {
             console.log('404 Error happened')
             // TODO handle error here (redirect)
        }
    }
}
基于。当冲突解决程序抛出错误时,它将得到一个被拒绝的错误。因此,您将丢失原始错误。下面的代码修复了该问题

@Injectable()
export class GlobalErrorHandler implements ErrorHandler {

    handleError(error: any): void {
        if (error.status === 404) {
             console.log('404 Error happened')
             // TODO handle error here (redirect)
        }
    }
}

您需要在服务中处理它吗?我发现从订阅中调用该服务的处理效果很好,如果这是一个选项,可以强调这对您的作用。我从服务中处理它,以测试从服务传递的错误是否是预期的错误,是的,它是
HttpErrorResponse
但从errorHandler来看,它不是同一个实例,而是一个字符串。我可以通过订阅来处理它,但当你可以全局处理它时,它有点重复。对吗?我认为这取决于你正在制作的应用程序,最近在一个项目中,我曾考虑设置一个服务来处理所有API错误响应,但后来意识到l尽管HTTP错误响应在两个地方可能是相同的,但我希望提示用户执行不同的操作,以便在每个地方进行必要的处理。您需要在服务中处理它吗?我发现从订阅中调用服务的处理效果很好,如果需要,可以强调这对您的作用一个选项?我从服务中处理它,以测试从服务传递的错误是否是预期的错误,是的,它是
HttpErrorResponse
的一个实例,但从errorHandler中它不是同一个实例,而是一个字符串。我可以通过订阅来处理它,但当您可以全局处理它时,它有点重复。对吗?我想这取决于您正在制作的应用程序,在最近的一个项目中,我曾考虑设置一个服务来处理所有API错误响应,但后来意识到,尽管HTTP错误响应可能在两个地方是相同的,因为我希望提示用户做不同的事情,所以在每个必要的地方处理它。