在 angular 10 中使用异步服务方法作为工厂提供者

use async service method as factory provider in angular 10

我正在开发一个 Angular 10 的应用程序,我必须在向用户显示该应用程序之前执行各种初始化。

我是 Angular 和 Typescript 的新手,我正在尝试根据通过谷歌搜索网络找到的示例来执行此操作。

到目前为止我已经这样做了,这应该让应用程序在启动前等待 10 秒,但它还没有起作用。

我使用以下代码创建了一个 AdminutilsService:

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})

export class AdminutilsService {

  constructor() { }

  loadCustomerConfig(): (() => Promise<boolean>) {
    return (): Promise<boolean> => {
      return new Promise<boolean>((resolve: (a: boolean) => void): void => {
        setTimeout(() => resolve(true), 10000);
      });
    };
  }

}

在app.module.ts中,我添加了:

import { AdminutilsService } from './adminutils.service';
export function loadCustomerConfigFactory(myAdminutilsService: AdminutilsService) {
     return () => myAdminutilsService.loadCustomerConfig();
}

还有@NgModule:

  providers: [{
    provide: APP_INITIALIZER,
    useFactory: loadCustomerConfigFactory,
    deps: [AdminutilsService],
    multi: true
  }],

编译完成,因为我只有一个在线警告

export function loadCustomerConfigFactory(AdminutilsService: AdminutilsService) {

预期调用签名:'loadCustomerConfigFactory' 有一个 typedef (typedef)

但是当我启动应用程序时,并没有像预期的那样延迟 10 秒。

请指教

你让它变得比必要的复杂得多。

下面的简化代码应该可以工作:

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class AdminutilsService {
  loadCustomerConfig(): Promise<boolean> {
    return new Promise<boolean>(resolve => {
      setTimeout(() => resolve(true), 10000);
    });
  }
}

在app.module.ts中:

import { AdminutilsService } from './adminutils.service';

export function loadCustomerConfigFactory(myAdminutilsService: AdminutilsService) {
  return () => myAdminutilsService.loadCustomerConfig();
}

我还设置了一个StackBlitz用于演示。 “正在加载”显示 10 秒,然后 Angular 应用程序初始化。