我想使用HttpInterceptor拦截方法在请求中传递带有标头的身份验证令牌。我的_loginSvr给出了从GetUser()方法返回的Observable中的标记。因此,当此时返回next.handle(请求)时,令牌为空。 但是在下一个http请求中它可以正常工作,因为我已经猜到了令牌。那么我怎么能等到句柄返回reuqest,直到我得到令牌。
答案 0 :(得分:2)
由于subscribe
为'非阻止',因此在订阅方法完成之前已到达行return next.handle(request);
:
您可以在此处使用mergeMap:
import 'rxjs/add/operator/mergeMap';
...
intercept(req: HttpRequest<any>, next: HttpHandler) {
return this._loginSvr.GetUser().mergeMap(user => {
if (user.access_token) {
req = req.clone({ setHeaders: { Authorization: 'Bearer ' + user.access_token } });
}
return next.handle(req);
}
}
处理您的登录逻辑可以在mergeMap
functionallity。