如何从 Angular 拦截器执行异步操作?
How to perform async operation from Angular interceptor?
我正在尝试在发出网络请求之前执行异步操作。
由于某种原因,网络请求甚至没有启动。
我基本上希望请求保持到 accessToken$
observable 中的下一个函数被触发。
据我所知,我将 accessToken$
与 return 从 next.handle(req)
编辑的可观察对象进行了管道传输,从而导致了中间件 then(..).then(..)
行为。
代码:
public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const accessToken$: Observable<string> = from("accessToken");
return accessToken$.pipe(mergeMap((accessToken: string) => {
req = req.clone({
setHeaders: {
'Authorization' : `${accessToken}`,
}
})
return next.handle(req);
}));
}
我想弄清楚为什么这种中间件行为不起作用。或者为什么它可以工作但是拦截器仍然出于某种原因阻止请求出去。
值得一提的是,如果我只是 return next.handle(req)
,请求就会通过。所以我的内心告诉我,我定义的可观察交互有问题。
我遵循了这个教程:
Async HTTP Interceptors with Angular 4.3
如果添加捕获错误,它会在输出中记录任何内容吗?
public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const accessToken$: Observable<string> = of("accessToken");
return accessToken$.pipe(mergeMap((accessToken: string) => {
const tokenRequest = req.clone({
setHeaders: {
'Authorization': `${accessToken}`,
}
});
return next.handle(tokenRequest);
}),
catchError((error) => {
console.log(error);
return throwError(error);
}));
}
我正在尝试在发出网络请求之前执行异步操作。
由于某种原因,网络请求甚至没有启动。
我基本上希望请求保持到 accessToken$
observable 中的下一个函数被触发。
据我所知,我将 accessToken$
与 return 从 next.handle(req)
编辑的可观察对象进行了管道传输,从而导致了中间件 then(..).then(..)
行为。
代码:
public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const accessToken$: Observable<string> = from("accessToken");
return accessToken$.pipe(mergeMap((accessToken: string) => {
req = req.clone({
setHeaders: {
'Authorization' : `${accessToken}`,
}
})
return next.handle(req);
}));
}
我想弄清楚为什么这种中间件行为不起作用。或者为什么它可以工作但是拦截器仍然出于某种原因阻止请求出去。
值得一提的是,如果我只是 return next.handle(req)
,请求就会通过。所以我的内心告诉我,我定义的可观察交互有问题。
我遵循了这个教程: Async HTTP Interceptors with Angular 4.3
如果添加捕获错误,它会在输出中记录任何内容吗?
public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const accessToken$: Observable<string> = of("accessToken");
return accessToken$.pipe(mergeMap((accessToken: string) => {
const tokenRequest = req.clone({
setHeaders: {
'Authorization': `${accessToken}`,
}
});
return next.handle(tokenRequest);
}),
catchError((error) => {
console.log(error);
return throwError(error);
}));
}