angular - 在特定时间可观察到的 Angular2 触发器
问题描述
所以首先有一点背景。我有一个 Angular 2 仪表板,它位于登录后面,并且也集成了信号器。对于通过 Angular 的 http 客户端发送的请求,我可以使用 url 拦截器检查令牌是否已过期,如果是,则从 api 请求新令牌。这适用于所有经过身份验证的调用,除了信号器。
在登录时使用信号器,我们建立连接并将承载令牌作为查询字符串的一部分发送。但是,由于信号器是独立的,因此不使用 angular s http 客户端,因此不会命中 url 拦截器。我一直在考虑不同的方法来处理这个问题,对我来说最干净的方法是订阅一个在令牌过期时触发的 observable。
所以现在我的问题是,如果我有一个到期日期,我可以写一个可观察的来触发说到期时间比当前时间早五分钟的时间。这样我就可以在我的信号器服务中订阅那个 observable 并断开并连接到更新的身份验证令牌。如果需要,我可以提供代码示例,但我不知道他们对我的问题有多大帮助。
感谢您对此的任何帮助。
解决方案
我不了解信号器,但我可以为您的要求提供解决方案。
你可以使用timer
from rxjs
,这就像setTimeout()
,但只是一个 Observable。
expirationDate
在到期日期前五分钟为另一个创建日期对象。减去它们以找到 Observable 应该触发的时间。
以毫秒为单位将其传递time
给您可以进行订阅的计时器。完成 API 调用后,再次调用相同的方法以重新初始化计时器。
timerSubs: Subscription; // to cancel existing timer
ngOnInit() {
this.calculateTimeForTimer()
}
calculateTimeForTimer() {
let expirationDate = new Date();
expirationDate.setTime(expirationDate.getTime() + 10 * 1000); // 10 seconds from now.
// in your case use your own duration/date of expiration
let alertDate = new Date(expirationDate);
alertDate.setTime(alertDate.getTime() - 5 * 1000); // 5 seconds before expiration
// in your case subtract 5 minutes instead of 5 seconds
let timeDuration = (expirationDate.getTime() - alertDate.getTime());
this._startTimer(timeDuration);
}
private _startTimer(timeDuration) {
if (this.timerSubs) {
this.timerSubs.unsubscribe();
}
this.timerSubs = timer(timeDuration).subscribe((data) => {
// make the API call, and then calculate appropriate duartion and call startTimer() again
of("This is your new Token").pipe(delay(2000)).subscribe((apiData) => {
console.log("Data from API", apiData);
this.calculateTimeForTimer();
})
})
}
请参阅此处的示例,它与当前时间有 10 秒的到期日期。 https://stackblitz.com/edit/angular-bhupgg
推荐阅读
- javascript - 在 Django 中使用 gltf 加载器加载三个 JS 模型
- flutter - 设置手势栏颜色透明[Flutter]
- javascript - 如何使用一个集合中的文档字段从不同集合中检索另一个文档字段?
- php - 在另一个类中使用类时找不到 PHP 类
- c++ - 将变量添加到向量列表的 C++ 问题
- python-3.x - 将 long lat 元组转换为线串
- php - WooCommerce 价格回合
- javascript - 图片点击选项不适用于 Vanilla Javascript;灯箱
- html - Chrome 原生图像延迟加载仅适用于 iframe
- java - java中的矩阵数组