处理HTTPClient get方法不工作的错误



我试图在我的服务文件中捕获HTTP获取消息中的错误。

脚本如下:

import { Injectable } from '@angular/core';
import { PortfolioEpicModel, PortfolioUpdateStatus } from '../models/portfolio-epic.model';
import { HttpClient, HttpErrorResponse, HttpParams} from '@angular/common/http'
import { config, Observable } from 'rxjs';
import { retry, catchError } from 'rxjs/operators';
refreshPortfolioEpicsList(id:number):Observable<PortfolioEpicModel[]>{   
this.baseUrl=this.conf.getSettings("apiUrl");
return this.http.get<PortfolioEpicModel[]>(this.baseUrl+ "/api/pepics/"+ id.toString())
.pipe(catchError(this.errorHandler));
}
errorHandler(error:HttpErrorResponse){
console.info(error.message);
}

但是catchError调用显示这个错误:

参数类型'(error: httperorresponse) =>void'不能赋值给'类型的参数'(err: any, caught: Observable<PortfolioEpicModel[]>) =>ObservableInput"。类型void不能赋值给类型ObservableInput .ts(2345)

我不知道该怎么处理。

我在Angular 11中工作。

可以从rxjs中使用throwError

import { throwError } from 'rxjs';
errorHandler(error: HttpErrorResponse) {
console.info(error.message);
return throwError(error.message || "server error.");
}

在StackBlitz上成功和错误演示的示例解决方案

你会得到这个错误,因为你传递给RxJS catchError操作符的errorHandler函数要求要么返回一个可观察对象,要么重新抛出错误(就像@Yong Shun在他的回答中所示)

您可以在这里查看catchError操作符的官方文档:https://rxjs.dev/api/operators/catchError

最新更新