javascript - 从拦截器Angular调用异步函数到catch
问题描述
调用其他函数后,我需要调用异步方法等待。我在 rxjs 方面不是很专家,而且我从未使用过 async/await 调用。
我在拦截器中有这个逻辑
public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (req.headers.get('a-header')) {
const headers = req.headers.delete('a-header');
return next.handle(req.clone({ headers, withCredentials: true }));
}
return next.handle(req.clone({ withCredentials: true })).catch((err: Error) => {
if (!(err instanceof HttpErrorResponse) || (err as HttpErrorResponse).status !== 401) {
return throwError(err);
}
this.error.notify401Error(err);
//NEED TO AWAIT THE NEXT RESPONSE
this.callXApi(next);
//AND THEN CONTINUE WITH THIS CALL
this.redirectSignedOut();
return empty();
});
}
请注意,我需要调用CallXApi
,等到完成,然后继续使用redirectSignedOut
函数。
private callXApi(): void {
const { uri } = this.config;
this.httpClient
.delete(uri, { withCredentials: true })
.subscribe(() => { console.log('completed.') }, (err) => throwError(err));
}
我怎样才能做到这一点?
更新
我通过更改下一个代码实现了这一点
return <any>next.handle(req.clone({ withCredentials: true })).catch(async (err: Error) => {
if (!(err instanceof HttpErrorResponse) || (err as HttpErrorResponse).status !== 401) {
return throwError(err);
}
this.errorEventService.notify401Error(err);
await this.callXApi();
return EMPTY;
});
解决方案
试试这个:
return next.handle(req.clone({ withCredentials: true })).catch(async (err: Error) => {
if (!(err instanceof HttpErrorResponse) || (err as HttpErrorResponse).status !== 401) {
return throwError(err);
}
this.error.notify401Error(err);
//NEED TO AWAIT THE NEXT RESPONSE
await this.callXApi(next);
//AND THEN CONTINUE WITH THIS CALL
this.redirectSignedOut();
return empty();
});
推荐阅读
- jquery - 检查 XHR 返回什么响应 Jquery
- apache - Apache 虚拟主机非 www 不工作
- hashicorp-vault - 如何使用 Hashicorp Vault 设置用户名/密码身份验证
- javascript - 编码为十六进制字符串:参数必须是字符串 node.js
- python - 在 Keras 中计算两个张量之间的余弦相似度
- html - 如何使反应阻止浏览器缓存外部加载的html?
- javascript - 如何从wordpress url中提取令牌并给它一个变量/值?
- javascript - 如何撤消 addEventListener?
- android - Epoxy 要求每个模型属性实现 equals 和 hashCode 错误
- java - 为什么在 HashMap 节点中维护键的哈希?