gpt4 book ai didi

angular - try catch 错误处理不会捕获错误

转载 作者:行者123 更新时间:2023-12-05 05:12:14 25 4
gpt4 key购买 nike

我正在构建一个演示 angular 7 应用程序,其中我有通用的 POST 方法。虽然我能够调用此方法,但似乎没有在 catch block 中捕获任何错误(401,500 等)。我可以在网络选项卡中看到发布失败。下面的代码有什么问题?

//通用发布方法

private async genericPostMethodAsync(url: string, options:any, body: any):Promise<any> {

try {
const response = await this.httpClient.post(url, body,
options).toPromise();
console.log(response);
return response;
} catch (error) {
await this.handleError(error, this);
}
}

private handleError(error: any, any: any): Promise<any> {
return Promise.reject(error.message || error);
}

最佳答案

Rxjs 6 有一个 catch 运算符,可以在他们的 site here 上找到.我相信您可以使用他们提供的内容尝试以下操作。与您使用的 promise 没有什么不同,但应该提供您正在寻找的错误捕获。

(编辑后最好能想出)

工作解决方案

使用 catchError 获取 Http 错误,然后使用 of 运算符确保其返回一个可观察对象。在目前正在运行的小程序中进行了尝试和测试,所有工作都不确定是否使用 promise。

import { Observable, of  } from 'rxjs';
import { catchError } from 'rxjs/operators';

public genericPostMethodAsync(text: any): Observable<any> {
return this.httpClient
.post<any>('url', {}).pipe(catchError(val => of(
this.handleError(val)
)));

}

public handleError(val): void {
console.log(val);
}

首选解决方案

我更愿意做的是查看在组件内的订阅函数中捕获错误。因此,在您调用函数 try 的组件中。

this.exampleService.genericPostMethodAsync(url, options, body).subscribe(data => {
console.log(data); // is good.
}, error => {
console.log(error); // is bad.
});

使用 HTTP 和 observable 的服务中的主要调用如下所示。

private genericPostMethodAsync(url: string, options:any, body:any):Observable<any> {
return this.httpClient.post(url, body, options).pipe(map(data => data)
);
}

关于angular - try catch 错误处理不会捕获错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54781203/

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