我正在编写一个小型应用程序,在其中我需要维护一些令牌系统以验证当前登录的用户。因此,我在setInterval()的帮助下编写了一种从某些服务器获取更新令牌的方法。为了获取更新的令牌,我使用了可观察的Angular内置HttpClient。但是我的问题是“可以在setInterval方法中订阅可观察的HTTP客户端吗?”
setInterval(() => {
if (this.isLoggedIn) {
this.someService.getUpdatedToken().subscribe();
}
}, 300000)
答案 0 :(得分:1)
您无需使用setInterval
。您应该将rxjs interval
运算符用作外部可观察值,并使用this.someService.getUpdatedToken()
或switchMap
将其与mergeMap
可观察值组合,如下所示:
[我假设您正在使用rxjs ver> 5.5]。
interval(3000000)
.pipe(
switchMap(() => {
if(this.isLoggedIn) {
return this.someService.getUpdatedToken();
} else {
//HERE YOU CAN RETURN SOMETHING AS PER YOUR LOGIC
//ENSURE TO WRAP THE SAME IN OBSERVABLE
//FOR DEMO PURPOSE I AM RETURNING null WRAPPED IN OBSERVABLE USING of
return of(null);
}
})
).subscribe((token) => {
//do whatever you want to do with token
console.log(token);
});
答案 1 :(得分:1)
如果您每次都取消订阅可观察的项目就可以了
但是我认为更好的方法是在给定的X时间内从可观察的值中发出一个值,因此您只需订阅一次,然后使用一个订阅即可
您可以为此使用可观察的时间间隔