可以在setInterval()函数内订阅可观察的Angular内置对象吗?

时间:2019-07-19 13:44:49

标签: angular

我正在编写一个小型应用程序,在其中我需要维护一些令牌系统以验证当前登录的用户。因此,我在setInterval()的帮助下编写了一种从某些服务器获取更新令牌的方法。为了获取更新的令牌,我使用了可观察的Angular内置HttpClient。但是我的问题是“可以在setInterval方法中订阅可观察的HTTP客户端吗?”

setInterval(() => {
      if (this.isLoggedIn) {
        this.someService.getUpdatedToken().subscribe();
      }
    }, 300000)

2 个答案:

答案 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时间内从可观察的值中发出一个值,因此您只需订阅一次,然后使用一个订阅即可

您可以为此使用可观察的时间间隔

https://www.learnrxjs.io/operators/creation/interval.html