gpt4 book ai didi

angular - 将HttpHandler返回的Observable与HttpInterceptor中的另一个合并(Angular 8)

转载 作者:行者123 更新时间:2023-12-03 08:42:25 24 4
gpt4 key购买 nike

我们正在运行Angular8。已设置我们的API,以便响应的主体包括“数据”属性和“错误”属性。它们不是互斥的-响应中可能有数据和错误,我们都希望。我们成功设置了Observable next事件来发出嵌套的数据响应。但是,这忽略了错误。我们想通过以下方式订阅来处理调用组件上的错误
this.myService.getData.subscribe(resp => {...}, error => {...});
这是我们的拦截器代码:

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request)
.pipe(map((event) => {
if (event instanceof HttpResponse) {

if (event.body && event.body.hasOwnProperty('data')) {
const eventClone = event.clone({ body: event.body['data'] });
return eventClone;
}

return event;
}
}));

}

我曾尝试将两个可观察对象连接起来,修改当前的可观察对象和其他方法,但最终未能成功地将错误和响应都反馈给组件。

最佳答案

我最终将其与以下代码一起使用。这样做可能会有更好的方法,但是最终成功了:

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request)
.pipe(filter(e => e instanceof HttpResponse),
switchMap(res => {
let httpResponse: HttpResponse<any> = res as HttpResponse<any>;
let formattedResponse = httpResponse.clone({ body: httpResponse.body['data'] })
if (res['body'] && res['body']['errors']) {
let errors = res['body']['errors'];
return new Observable<HttpResponse<any>>(o => {
o.next(formattedResponse);
o.error(errors)
});
} else return new Observable<HttpResponse<any>>(o => o.next((formattedResponse)));
}));

}

关于angular - 将HttpHandler返回的Observable与HttpInterceptor中的另一个合并(Angular 8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60532446/

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