javascript - 如何防止错误处理程序在 Observable 流上多次触发?
问题描述
我有一个处理 http 请求的 http 服务。它有一个处理程序,通过在屏幕上弹出一个模式来处理错误。
我还有一个拦截器,可以捕获插入授权令牌的请求,以备不时之需。令牌来自请求另一个服务。
问题是,如果需要授权请求但它失败了,即使第二个请求从未发送,模态错误也会显示两次。
如果认为我处理 Observable 流的方式有问题。有人可以帮忙吗?
/// http service
request(url, body, headers) {
return this.httpClient.post(url, body, headers).pipe(
catchError(() => this.handleError())
);
}
handleError() {
this.showModal();
return throwError('Theres been an error.');
}
/// interceptor
intercept(request, next) {
const authorization = request.headers.get('Authorization');
if (authorization) {
return this.httpService.request(url, body, headers).pipe(
exhaustMap(token => {
const newRequest = request.clone({
headers: request.headers.set(
'Authorization',
token
)
});
return next.handle(newRequest);
})
);
}
return next.handle(request);
}
解决方案
您是否尝试过console.log
解决您遇到的错误。您可能会遇到两个不同的错误。
您是否也确定这部分代码:
const newRequest = request.clone({
headers: request.headers.set(
'Authorization',
token
)
});
在某些库中,不允许在发送请求后设置标头。
推荐阅读
- javascript - 当我们在下拉列表中选择数据时,响应式数据表不起作用
- amazon-web-services - AWS 上的 Spring Boot Thymeleaf Docker 映像:Whitelabel 错误页面 404
- netlogo - 问海龟 - 代理集的排序
- firebase - 如何在flutter中使用uid从firebase实时数据库中获取用户信息以及如何在我的用户表中添加uid
- java - 无法从 JTextField 中检索文本
- html - 如何在使用 yattag 时动态创建属性?
- android - 对从回收器视图到片段的共享转换没有影响
- mongodb - mongo客户端在main函数中设置,其他模块函数接收nil值
- angular - 如何在 Angular 中测试 cdkConnectedOverlay
- python - 在公共索引上连接两个数据帧,有没有更有效的方法来做到这一点?