首页 > 解决方案 > 如何在继续之前使 Angular 拦截器延迟?

问题描述

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

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

authService.ready$is a BehaviorSubjectthat starts false,并且 iscomplete()一旦服务的构造函数完成并且我们找到了一个令牌(或没有)。AuthenticationInterceptor侦听以authService.token$获取要注入呼叫的详细信息。我确定第二个拦截器只是几行代码,但我对 rxjs 不够熟悉,无法得到它。有任何想法吗?

编辑:似乎我想使用(实验性的?)APP_INITALIZER 提供程序,但即使这样也有问题。Angular4 APP_INITIALIZER 不会延迟初始化......我是否走在正确的轨道上?

标签: angularrxjs

解决方案


顶层 NgModule 中的 APP_INTIALIZER 是一个可以访问引导程序的模块,它就是答案。


推荐阅读