У меня есть скрипт для проверки пользователей, которых я хочу отключить во время инициализации приложения, поэтому я предоставляю APP_INITIALIZER
in app.module
. Он делает HTTP-вызов, который проходит через два switchMaps
, а затем преобразуется в обещание. HTTP-вызов работает, и затем первый switchMap срабатывает один раз, а затем второй switchMap срабатывает бесконечно и блокирует приложение. Я не могу понять, что происходит, и я не могу понять, как это отладить. В какой-то момент это сработало, и я не уверен, какие изменения сломали его.
Вот метод, который возвращается к APP_INITLIZER
:
validateUser() {
let jwt = this.getJWT();
if (jwt && jwt.length) {
return this.api
.get<{ data: { tokenValid: boolean } }>('/users/validateToken', { token: jwt })
.pipe(
switchMap(response => {
if (response.data.tokenValid) {
this.setUser()
return this.currentUser$.asObservable()
} else {
return ObservableOf(false);
}
}),
switchMap(currentUser => {
if (currentUser) {
currentUser.getEvents();
this.setCurrentUser(currentUser);
} else {
this.logout()
}
return ObservableOf(true);
})
)
.toPromise();
}
return Promise.resolve(true);
}
currentUser$
- субъект поведения, если он имеет значение.