#angular #frontend #interceptor #angular-services
#angular #интерфейс #перехватчик #angular-сервисы
Вопрос:
Мой класс intercept имеет токен в качестве локальной переменной.
У меня есть функция autoLogin() в том же файле (перехватчик)
Этот автоЛогин вызывается в ngOnInit из app.component.ts.
Это мой перехват.
Обратите внимание на строку 21, вывод токена на консоль.
Проблема: поскольку функция autoLogin вызывается первой, токен из локального хранилища присваивается токену локальной переменной. (напечатано в строке 94). Таким образом, печать в строке 21, которая вызывается после autoLogin, должна печатать токен, но он печатает » (пустая строка, инициализированное значение).
Примечание: выполнено 3 HTTP-вызова.
Комментарии:
1. Является ли ваш перехватчик одноэлементным? Кроме того, существует ли другой путь к коду, который изменит
token
?2. Для параметра Multi в providers установлено значение true. Токен используется только внутри класса перехватчика, нигде снаружи.
3. Цитирую официальный документ :
If you import HttpClientModule multiple times across different modules (for example, in lazy loading modules), each import creates a new copy of the HttpClientModule, which overwrites the interceptors provided in the root module.
так что, скорее всего, ваши перехватчики — это разные экземпляры. Вы можете либо использовать метод, предложенный в документе, для использования общего единственного экземпляра, либо внедрить другую службу для хранения состояния токена. Лично я считаю, что последнее проще.