Angular 角度自定义错误处理程序未从promise获取错误类型

Angular 角度自定义错误处理程序未从promise获取错误类型,angular,error-handling,promise,rxjs,custom-error-handling,Angular,Error Handling,Promise,Rxjs,Custom Error Handling,当从承诺中抛出时,我的自定义错误处理程序得到的每个错误都会丢失其类型 从“@angular/common/http”导入{HttpErrorResponse}; 从“@angular/core”导入{ErrorHandler,Injectable,Injector,NgZone}; 从“@angular/material”导入{matsnakbar}”; @可注射() 导出类GlobalErrorHandler实现ErrorHandler{ 构造函数(专用注入器:注入器){} handleErr

当从承诺中抛出时,我的自定义错误处理程序得到的每个错误都会丢失其类型

从“@angular/common/http”导入{HttpErrorResponse};
从“@angular/core”导入{ErrorHandler,Injectable,Injector,NgZone};
从“@angular/material”导入{matsnakbar}”;
@可注射()
导出类GlobalErrorHandler实现ErrorHandler{
构造函数(专用注入器:注入器){}
handleError(错误:任意):无效{
if(error instanceof HttpErrorResponse)//这需要触发
this.injector.get(NgZone).run(()=>this.injector.get(matsnakbar.open)(错误消息))
控制台错误(错误)
}
}
findProject(2)将抛出HttpErrorResponse,因为项目2不存在

工作

this.projectService.findProject(2.subscribe)()
不起作用

await this.projectService.findProject(2).toPromise()
不起作用

await this.projectService.findProject(2).toPromise()
等待这个.projectService.findProject(2.toPromise().catch(错误=>{throw error})
不起作用

await this.projectService.findProject(2).toPromise()
试试看{
等待这个.projectService.findProject(2.toPromise())
}捕获(e){
console.log(HttpErrorResponse的e instanceof)//true
掷e
}
ProjectService是一个由swagger生成的类,它返回一个可观察的

编辑: 这是handleError方法中的错误对象:

Error: Uncaught (in promise): HttpErrorResponse: {"headers":{"normalizedNames":{},"lazyUpdate":null},"status":404,"statusText":"OK","url":"http://localhost:9090/api/project/2","ok":false,"name":"HttpErrorResponse","message":"Http failure response for http://localhost:9090/api/project/2: 404 OK","error":{"timestamp":1534921795114,"status":404,"error":"Not Found","exception":"de.dlh.lhind.lhindquiz.controller.ResourceNotFoundException","message":"No message available","path":"/api/project/2"}}
    at resolvePromise (zone.js:814)
    at zone.js:724
    at rejected (main.js:105)
    at ...

似乎承诺将HttpErrorResponse包装成了一个常规错误和错误。message确实是请求的对象

我刚刚碰到了同样的问题,偶然发现了您的问题

如果需要,您可以通过在ErrorHandler中展开异常来修复此问题(至少在Angular 7中)

if (error.promise && error.rejection) {
    // Promise rejection wrapped by zone.js
    error = error.rejection;
}

// regular error handling code

注意:我使用
控制台计算了包装错误对象的结构。错误(“%O”,Error)
根据这个问题:

不进入if语句,注销“Error”,它说它的类型是什么?添加到问题中有一个非常类似的问题。在promise stream中,它不会工作,但会与订阅流一起工作。感谢您在Ionic Angular Cordova应用程序中,特别是在iOS应用程序中收到了相同的问题。这条线解决了这个问题。所有从未等待的异步方法抛出的错误,角度错误处理程序将捕获它们并作为承诺返回。