Я тоже наткнулся на это, где APP_INITIALIZER
не будет полностью инициализировать приложение перед запуском CanActivate
охранника маршрута.
Несколько вещей, которые нужно посмотреть:
mapConfigService
должен вернуть Promise
- При преобразовании
Observable
в обещание через toPromise()
и последующем вызове .then()
- обещание освобождается до подключения к .then()
:
Это будет иметь проблему:
let promise = this.mapConfigService.map(...).toPromise().then(()=>{
/// this part of the code will NOT block the APP_INITIALIZER
/// meaning when toPromise() is called the promise is released
/// right away before having a chance to fully execute the .then() part
....
});
Вместо этого оберните Observable
в Promise
и попросите resolve()
выпустить обещание, как показано ниже:
readConfig(): Promise<any> {
const promise = new Promise((resolve, reject) => {
this.mapConfigService.subscribe((data)=> {
// additional stuff
resolve();
return data;
});
return promise;
}
Надеюсь, это поможет.