angular - 如何在继续之前使 Angular 拦截器延迟?
问题描述
我有一个功能正常的 Angular 5 拦截器用于身份验证,但我想为身份验证服务添加容量,以便在继续之前能够检查本地存储中的身份令牌。不幸的是,我发现应用程序加载速度如此之快,以至于应用程序在身份验证服务能够更新其状态以宣布它在本地存储中找到一个令牌之前使用拦截器进行调用。
ready$
在我看来,我应该能够在第一个拦截器之前创建第二个拦截器,并且在我看到身份验证服务的observable移动之前不允许任何事件通过。如果我在回调环境中操作,我会理解如何安排这个 - 等待承诺解决,一旦它解决触发回调并流入链的下一个环节 - 但我不明白如何如果我预计会回来,让它工作Observable<HttpEvent>
。
authService.ready$
is a BehaviorSubject
that starts false
,并且 iscomplete()
一旦服务的构造函数完成并且我们找到了一个令牌(或没有)。AuthenticationInterceptor
侦听以authService.token$
获取要注入呼叫的详细信息。我确定第二个拦截器只是几行代码,但我对 rxjs 不够熟悉,无法得到它。有任何想法吗?
编辑:似乎我想使用(实验性的?)APP_INITALIZER 提供程序,但即使这样也有问题。Angular4 APP_INITIALIZER 不会延迟初始化......我是否走在正确的轨道上?
解决方案
顶层 NgModule 中的 APP_INTIALIZER 是一个可以访问引导程序的模块,它就是答案。
推荐阅读
- php - 在 Cake Php 3.8 中导入文件
- node.js - 等效于 nodejs tls 中的 openssl verify_return_error
- for-loop - Windows 批处理:在 FOR 循环中使用 DisableDelayedException 检查文件大小 > 2GB
- mongodb - MongoDB Aggregate - 如何检查文档数组中是否存在特定字段值
- mysql - 条件在查询生成器中不起作用的地方离开加入 laravel
- scenekit - 来自 ARKit 深度缓冲区的 SceneKit 点云
- xamarin - 更新 Xamarin.Forms 版本 5.0.0.1874 后显示空格的 Webview
- ios - 快速读取文本文件并返回字典数组
- r - SEM 与 R 中的 lavaan,问题指定具有相关子尺度的模型。警告:无法计算标准误差
- java - 如何为 FlatItemWriter 动态设置资源