【问题标题】:Refresh Angular component similar to Cron job刷新类似于 Cron 作业的 Angular 组件
【发布时间】:2019-01-16 09:39:45
【问题描述】:

我的 Angular 6 应用程序中有一个仪表板组件,我需要每分钟刷新一次,因为从 API 获取的数据每分钟都会更新一次(有一个 Cron 作业正在运行以更新数据)。

我知道Observable.interval(60000),但这将是我最后的选择,因为我的 API 数据会在时钟的每一分钟后刷新,而不是每隔 60 秒刷新一次。

例如假设应用程序在上午 8 时 0 分和 30 秒开始。我不希望我的仪表板在 60 秒后刷新,即 8 小时 1 分和 30 秒,但我希望它在 8 小时 1 分和 0 秒后刷新。希望我的要求很清楚。

【问题讨论】:

  • 请解释“时钟上的每一分钟”和“60 秒间隔”之间的区别
  • 这意味着我的应用程序在上午 8 小时 0 分 30 秒开始。我不希望我的仪表板在 60 秒后刷新,即 8 小时 1 分和 30 秒,但我希望它在 8 小时 1 分和 0 秒后刷新。希望清楚。

标签: javascript angular cron


【解决方案1】:

您可以在设置 Observable 之前计算当前毫秒计数与零之间的差异。

...
const now = new Date();
const initialDelay = 60 * 1000 - (now.getSeconds() * 1000 + now.getMilliseconds());
Observable
  .timer(initialDelay, 60000)
  .subscribe(...)

精度可能并不理想,但也许这就足够了。

更新:使用 WebSocket 连接可能是更可靠的解决方案。我想后端应用程序知道数据何时更新,因此它可以在新数据可用后立即发送新数据。这样您就可以在一个地方配置日程安排。

基本上,您需要一个服务来包装套接字连接并处理初始化和侦听来自服务器的消息。它还将提供一个用于订阅新消息的 observable。

也许this article 会更有帮助。

【讨论】:

  • 谢谢。我目前就是这样完成的。但我想像在 Cron 作业中一样轻松配置时间,以便可以随时更改配置以使其刷新。
猜你喜欢
  • 2015-10-10
  • 1970-01-01
  • 1970-01-01
  • 2014-05-14
  • 1970-01-01
  • 2019-07-17
  • 2013-02-01
  • 2015-12-18
  • 2013-09-19
相关资源
最近更新 更多