Angular 16+ Resolver запускается до завершения APP_INITIALIZER

Я сталкиваюсь со странным поведением при использовании angular V16 и нового разрешенияFN.

Если я вызываю страницу непосредственно из браузера (например, введя «localhost:4200/customer/123»), преобразователь выполняется ДО того, как APP_INITIALIZER завершит загрузку, и поэтому генерирует ошибку в моем преобразователе, поскольку не все загружаются.

Есть какие-нибудь подсказки по поводу этого странного поведения?

Провайдер:

      {
        provide: APP_INITIALIZER,
        useFactory: (
            injector: Injector) => {
            return () => {

                const dbService = injector.get(DbService);
                return dbService.initialize();
            };
        },
        deps: [Injector],
        multi: true
    }

Резольвер:

      export const CustomerResolver: ResolveFn<ICustomer> =
(route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot,
    customersService = inject(CustomersService),
    errorsService = inject(ErrorsService),
) => {

    let etag: string | null | undefined = "";
    const customer_Id = route.paramMap.get('customer_Id');
    
    if (customer_Id) {

        return customersService.getById(customer_Id)
            .pipe(
                
                takeLast(1),
                catchError(errorsService.catch),                                    
               );
    }

    return EMPTY;
}

Редактировать 1

Например, вы можете протестировать DbService следующим образом:

      export class DbService {
public initialize(): Observable<boolean> {
console.log(`Start ServiceDb`);
const init = new Subject<boolean>();
setTimeout(() => {
  init.next(true);
  init.complete();
console.log(`End ServiceDb`);
}, 500);
return init;
}
}

И такой резольвер:

      export const CustomerResolver: ResolveFn<ICustomer> =
(route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
) => {
    const customer_Id = route.paramMap.get('customer_Id');
    console.log('customer resolver');
    return EMPTY;
}

Вы увидите в консоли:

Запустить базу данных службы

решатель клиентов

Завершить службу базы данных

Как будто резолвер не дождался окончания инициализации

0 ответов

Другие вопросы по тегам