【发布时间】:2020-07-12 12:16:15
【问题描述】:
很抱歉标题,但我找不到更好的。
我正在调用一个 HTTP API,它在发送 GET 命令时返回一个 json 对象,但如果找不到资源,它将返回 404。 我正在使用 Angular 9,我正在尝试找到一种方法从服务中输出 json 对象,或者在同一个 Observable 上返回接收到的 HTTP 错误的枚举值。
请看下面的代码:
device.service.ts
getDevice(objectID: number | string): Observable<Device | ResponseStatus> {
return this.http.get<Device>(`http://localhost:8080/Registration/Device/${objectID}`)
.pipe(
catchError(this.handleError)
);
}
handleError(error: HttpErrorResponse): Observable<ResponseStatus> {
switch (error.status) {
case 404: {
return of(ResponseStatus.objectNotFound);
break;
}
case 409: {
return of(ResponseStatus.objectAlreadyExists);
break;
}
}
}
我希望将 ResponseStatus 返回给我的组件,这样我就可以以相同的方式处理所有错误。
device-item-resolver-service.ts
export class DeviceItemResolverService implements Resolve<Device> {
constructor(private ds: DeviceService, private router: Router) { }
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Device> | Observable<never> {
let objectID = route.paramMap.get('objectID');
return this.ds.getDevice(objectID).pipe(
take(1),
mergeMap(
(item: Device) => {
if (item) {
return of(item);
}
else {
this.router.navigate(['/devices']);
return EMPTY;
}
}
)
);
}
}
显然一切都很顺利。运行程序我可以接收设备,但我找不到在解析器上处理 ResponseStatus 的方法。
拜托,你能帮帮我吗?
【问题讨论】:
标签: angular typescript http rxjs angular-observable