我正在构建一个具有通用POST方法的演示angular 7应用程序。虽然我可以调用此方法,但似乎没有任何错误(401,500等)被捕获在catch块中。我可以在“网络”标签中看到该帖子失败了。以下代码有什么问题?
//通用帖子方法
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);
}
答案 0 :(得分:1)
Rxjs 6具有一个catch运算符,可以在其site here上找到它。我相信您可以使用他们提供的方法尝试以下方法。与您使用的诺言几乎没有什么不同,但应提供您所寻找的错误捕获。
(最好在编辑后提出)
工作解决方案
使用catchError获取Http错误,然后使用of
运算符确保其返回可观察到的值。在目前正在研究的小程序中进行了测试和测试,所有工作都不确定是否使用诺言。
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);
}
首选解决方案
我更愿意做的是看在组件内的订阅函数中捕获错误。因此,在您调用该函数的组件中尝试一下。
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)
);
}
答案 1 :(得分:0)
尝试使用管道捕获错误。
例如
getHeroes (): Observable<Hero[]> {
return this.http.get<Hero[]>(this.heroesUrl)
.pipe(
catchError(this.handleError('getHeroes', []))
);
}
答案 2 :(得分:0)
看来原始代码确实有效。所有错误均在catch块中捕获。解决方案非常简单,请将模块更新为最新版本(nmp更新)。