我有一项服务每 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);
});
解释:
-
.interval()
创建一个每 2 发出一个事件的 observable
分钟。
-
.timeInterval()
将发出项目的 Observable 转换为一个
发出这些之间经过的时间量的指示
排放。
-
.mergeMap()
然后包裹你的每一个服务电话,
将结果转换为可观察值并返回。这保证了
您在第 0、2、4、6...分钟的服务呼叫被呼叫
同步地。 (想想有很多.then()
),即第 2 分钟的服务只有在第 0 分钟的呼叫后才会被呼叫,第 4 分钟的服务只有在第 2 分钟后才会被呼叫,以此类推。
-
.subscribe()
终于可以订阅数据了
Update:
如果您使用可管道操作符(rxjs5 及更高版本),只需通过管道操作符而不是链接它们:
interval(2 * 60 * 1000)
.pipe(
mergeMap(() => this.notificationService.getNotifications(this.token))
)
.subscribe(data => console.log(data))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)