Я думаю, что две карты SwitchMap являются проблемой.
.pipe(
switchMap(() => {
return this.store.select(state => state.AccountState)
.pipe(map(data => data.accountLoggedIn))
}),
switchMap((accountLoggedIn: boolean) => {
if (accountLoggedIn) {
return next.handle(this.setAuthorizationHeader(request));
}
}),
finalize(() => {
this.refreshingToken = false;
if (afterClosed$)
afterClosed$.unsubscribe();
})
)
Замените ваш код выше этим.
.pipe(
tap(() => {
this.store.select(state => state.AccountState)
.pipe(
switchMap((data) => {
if (data.accountLoggedIn) {
return next.handle(this.setAuthorizationHeader(request));
}
}),
finalize(() => {
this.refreshingToken = false;
if (afterClosed$)
afterClosed$.unsubscribe();
})
);
})
)
Кстати, просто примечание.Как вы делаете этот процесс, он никогда не будет выполнять подписку на исходный HTTP-запрос отправлено.Вы используете setTimeout из перехватчика.Таким образом, он не вернется к исходному запрашивающему.Перехватчик просто завершится, как только достигнет setTimeout.
Если я правильно понимаю, вы пытаетесь восстановить сеанс, когда есть 401. Если это так, вы можете воспользоваться подсказкой из этого статьи и соответственно реализуйте свой вариант использования.Дайте мне знать, если вам все еще нужна помощь.