如何使用RXJS每2分钟拨打一次http电话?

Enn*_*nio 11 rxjs angular-http angular

我有一项服务,每2分钟拨打一次我的休息服务.在我的服务上,我有以下功能

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

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

this.notificationService.getNotifications(this.token).subscribe((data) => {
  console.log(data);
});
Run Code Online (Sandbox Code Playgroud)

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

Coz*_*ure 32

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

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

Observable
    .interval(2*60*1000)
    .timeInterval()
    .flatMap(() => this.notificationService.getNotifications(this.token))
    .subscribe(data => {
        console.log(data);
    });
Run Code Online (Sandbox Code Playgroud)

说明:

  1. .interval() 创建一个每2分钟发出一次事件的观察者.
  2. .timeInterval() 将发射物品的Observable转换为发出这些发射之间经过的时间量的指示的Observable.
  3. .flatMap()然后包装你的每一个服务调用,将结果转换为一个observable并返回它.这样可以确保同步调用第0,第2,第4,第6 ......分钟的服务调用.(想想有很多.then()),即第2分钟的服务仅在第0分钟的呼叫后被呼叫,第4分钟仅在第2分钟后被呼叫,依此类推.
  4. .subscribe() 最后你可以订阅数据

更新:

如果您正在使用可管理的运算符(rxjs5及更高版本),只需管道运算符而不是链接它们:

interval(2 * 60 * 1000)
    .pipe(
        flatMap(() => this.notificationService.getNotifications(this.token))
    )
    .subscribe(data => console.log(data))
Run Code Online (Sandbox Code Playgroud)


Par*_*ain 10

If you are using rxJs 6+, you can simlpy use interval method to do. like this -

import { interval } from 'rxjs';

interval(3000).subscribe(x => /* do something */)
Run Code Online (Sandbox Code Playgroud)