【发布时间】:2019-09-20 17:34:13
【问题描述】:
如果tokenSubject 行为主体的值不为空,我有一个代码块,它返回角度拦截器的next 函数。
if (!this.tokenRefreshing) {
this.tokenRefreshing = true;
this.tokenSubject.next(null);
return this.loginService.getNewRefreshToken().pipe(
switchMap((tokenResponse: any) => {
if (tokenResponse) {
localStorage.setItem('jwtToken', tokenResponse.jwtToken);
localStorage.setItem('refreshToken', tokenResponse.refreshToken.value)
localStorage.setItem('UserName', tokenResponse.userName);
this.tokenSubject.next(tokenResponse);
console.log('token refreshed');
return next.handle(this.attachAuthToken(request));
}
else return <any>this.loginService.userLogout();
}),
catchError(err => {
this.loginService.userLogout();
return this.handleError(err);
}),
finalize(() => {
this.tokenRefreshing = false;
})
)
}
else {
return this.tokenSubject.pipe(
filter(token => token != null),
take(1),
switchMap(token => {
return next.handle(this.attachAuthToken(request))
}),
catchError((error) => {
this.tokenRefreshing = false;
return this.loginService.userLogout();
})
)
}
我无法理解如果多个 http 调用在那里命中以及它如何在行为主体中具有令牌值之后按顺序推迟和执行所有操作是如何工作的。谁能帮我理解这一点?
【问题讨论】:
-
此代码块之前的其他代码在哪里?