gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 18:28:50 33 4
gpt4 key购买 nike

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

import { HttpErrorResponse } from "@angular/common/http";
import { ErrorHandler, Injectable, Injector, NgZone } from "@angular/core";
import { MatSnackBar } from "@angular/material";

@Injectable()
export class GlobalErrorHandler implements ErrorHandler {

constructor(private injector: Injector) { }

handleError(error: any): void {
if (error instanceof HttpErrorResponse) // this needs to be triggered
this.injector.get(NgZone).run(() => this.injector.get(MatSnackBar).open(error.message))

console.error(error)
}

}

findProject(2) 将抛出一个 HttpErrorResponse,因为项目 2 不存在。

工作

this.projectService.findProject(2).subscribe()

不工作

await this.projectService.findProject(2).toPromise()

不工作

await this.projectService.findProject(2).toPromise().catch(error => { throw error })

不工作

try {
await this.projectService.findProject(2).toPromise()
} catch (e) {
console.log(e instanceof HttpErrorResponse) // true
throw e
}

ProjectService 是一个 swagger 生成的类,它返回一个 Observable

编辑:这是 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 ...

似乎 promise 将 HttpErrorResponse 包装在一个常规错误周围,而 error.message 确实是请求的对象

最佳答案

我刚遇到同样的问题,偶然发现了你的问题。

如果需要,您似乎可以通过解包 ErrorHandler 中的异常来解决此问题(至少在 Angular 7 中)。

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

// regular error handling code

注意:我根据这个问题使用 console.error("%O", error) 找出了包装错误对象的结构:Chrome: Print exception details to console

关于 Angular 自定义错误处理程序未从 promise 中获取错误类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51951471/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com