如何使用 RXJS 每 2 分钟进行一次 http 调用?

2024-01-01

我有一项服务每 2 分钟就会呼叫我的休息服务。在我的服务中我有以下功能

  getNotifications(token: string) {
     const body = 'xxxxxxxxx=' + token;
     return this.http.post('/rest/ssss/ddddddd/notificationcount', body, this.options)
          .map((res) => res.json());
  }

在我的组件上,我调用服务函数来调用 API。

this.notificationService.getNotifications(this.token).subscribe((data) => {
  console.log(data);
});

我想每 2 分钟打一次电话,最好的方法是什么?


既然你已经在使用Observables,只需充分利用它:)Obersvable.interval()是你的好朋友吗:

在您的组件中,执行以下操作:

Observable
    .interval(2*60*1000)
    .timeInterval()
    .mergeMap(() => this.notificationService.getNotifications(this.token))
    .subscribe(data => {
        console.log(data);
    });

解释:

  1. .interval()创建一个每 2 发出一个事件的 observable 分钟。
  2. .timeInterval()将发出项目的 Observable 转换为一个 发出这些之间经过的时间量的指示 排放。
  3. .mergeMap()然后包裹你的每一个服务电话, 将结果转换为可观察值并返回。这保证了 您在第 0、2、4、6...分钟的服务呼叫被呼叫 同步地。 (想想有很多.then()),即第 2 分钟的服务只有在第 0 分钟的呼叫后才会被呼叫,第 4 分钟的服务只有在第 2 分钟后才会被呼叫,以此类推。
  4. .subscribe()终于可以订阅数据了

Update:

如果您使用可管道操作符(rxjs5 及更高版本),只需通过管道操作符而不是链接它们:

interval(2 * 60 * 1000)
    .pipe(
        mergeMap(() => this.notificationService.getNotifications(this.token))
    )
    .subscribe(data => console.log(data))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 RXJS 每 2 分钟进行一次 http 调用? 的相关文章

随机推荐