在实现延迟加载后,角度取消从APP_INITIALIZER发送的HttpRequest

问题描述 投票:0回答:1

我正在使用APP_INITIALIZER来检查用户是否已登录的Angular(当前为v7)应用程序上工作。代码非常简单,我添加了APP_INITIALIZER

@NgModule({
...,
providers: [
  ...,
  {
    provide: APP_INITIALIZER,
    useFactory: CheckLoginFactory,
    deps: [Initialization, AuthService, ObservableState],
    multi: true
  }
]

使用此工厂:

export function CheckLoginFactory(
  init: any,
  auth: AuthService,
  oss: ObservableState
) {
  const confirmLogin = auth
    .confirmLogin()
    .pipe(catchError(val => of(undefined)));

  return () => confirmLogin.toPromise();
}

confirmLogin功能检查用户是否已登录

confirmLogin(): Observable<User> {
  return this.get('authentication/login').pipe(
    map(response => plainToClass(User, response as Object))
  );
}

到目前为止非常简单,该代码在过去的一年中一直有效。现在,我重新构建了应用程序,并为应用程序的所有子页面实现了延迟加载,现在此代码不再起作用。从confirmLogin发送的http请求在开发工具中始终显示为canceled,并且工厂运行到.pipe(catchError(val => of(undefined)));

关于Angular在使用/不使用延迟加载的应用程序中处理APP_INITIALIZER的方式是否有所不同?

angular initialization lazy-loading
1个回答
0
投票

您是否在懒加载模块?如果是这样,则必须确保在每个模块中都提供初始化程序。这个问题很好地回答了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.