Angular HttpInterceptor 拦截方法不适用于第一个请求

Angular HttpInterceptor intercept method does not work with the first request

我正在尝试使用 HttpInterceptor 拦截方法在请求中传递带有 header 的身份验证令牌。我的 _loginSvr 给出了来自 Observable return 的令牌,来自 GetUser() 方法。因此,当 next.handle(request) 被 returned 时,令牌为空。 但是在下一个 http 请求中,它可以工作,因为我猜从上一个请求中已经提取了令牌。那么我如何才能等待 return 请求的句柄,直到我获得令牌。

因为 subscribe 是 'non-blocking' 在订阅方法完成之前到达行 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 功能中实现。