代码之家  ›  专栏  ›  技术社区  ›  jesdynf

在继续之前,如何使角度拦截器延迟?

  •  2
  • jesdynf  · 技术社区  · 6 年前

    我有一个运行正常的Angular 5拦截器,用于身份验证,但我想增加身份验证服务的容量,以便在继续之前检查本地存储中的身份令牌。不幸的是,我发现应用程序加载速度太快,以至于在身份验证服务能够更新其状态以宣布在本地存储中找到令牌之前,应用程序正在使用拦截器进行调用。

    在我看来,我应该能够在第一个拦截器之前创建第二个拦截器,并且在看到身份验证服务上的移动之前,不允许任何事件通过 ready$ 看得见。如果我在回调环境中操作,我会理解如何安排这个问题——等待承诺解决,一旦它解决,就会触发回调并流到链的下一个环节——但如果我希望返回,我看不到如何让它工作 Observable<HttpEvent> .

    authService.ready$ 是一个 BehaviorSubject 这就开始了 false ,而且是 complete() 一旦服务的构造函数完成,我们找到了一个令牌(或者没有)。 AuthenticationInterceptor authService.token$ 获取要注入通话的详细信息。我相信第二个拦截器只需要几行代码,但我对rxjs还不太熟悉,无法理解。有什么想法吗?

    编辑:似乎我想使用(实验性的?)APP_INITALIZER提供程序,但即使这样也有问题。 Angular4 APP_INITIALIZER won't delay initialization ... 我走对了吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   jesdynf    6 年前

    顶级NgModule中的APP_initializer就是答案,它可以访问bootstrap。