在firebase中安排功能

时间:2017-09-18 11:45:32

标签: firebase ionic-framework cron

问题

我有一个与Ionic结合使用的firebase应用程序。我希望用户创建一个组并定义一个时间,当该组即将被自动删除时。我的第一个想法是创建一个setTimeout(),保存它并在用户更改时间时覆盖它。但正如我所读到的那样,setTimeout()在长时间使用时是一个糟糕的解决方案(因为firebase计费服务)。后来我听说过Cron,但就我所见,Cron只允许在特定时间调用函数,而不是相对于给定时间(例如从现在起1小时)。理想情况下,用户可以使用日期时间选择器定义任何给定时间。

我的想法

所以我的想法如下:

  1. 用户通过原生日期选择器定义日期,通过一些微调器
  2. 定义小时
  3. 客户端将时间写入单独的firebase数据库,并引用以下格式:/scheduledJobs/{date}/{hour}/{groupId}
  4. 每小时,Cron任务都会检查指定位置的所有组并删除它们
  5. 如果用户计划更改时间,他只会删除scheduledJobs中的旧值并创建一个新值
  6. 我的问题

    安排自动删除群组的最佳方法是什么?我不确定我的方法是否适合,因为查询日期可能会在我的数据库中创建一个非常扁平和长的列表。此外,我的方法在某种程度上是有限的,只有整整几个小时可以作为删除时间而不是任何给定时间。此外,我需要来自用户的两个输入(日期+小时),而不是仅使用日期时间(这也为我提供了会议记录)。

2 个答案:

答案 0 :(得分:1)

我相信你所寻找的是node schedule。基本上,它允许您运行服务器端cron作业,它能够获取date-time个对象并在那时安排作业。由于我假设您正在为此运行服务器,因此这将允许您根据用户输入在您希望的任何时间安排删除。

答案 1 :(得分:1)

TheCog的答案(依赖于运行节点服务器)的替代方法是将Cloud Functions for Firebase与第三方服务器(例如cron-jobs.org)结合使用来安排执行。有关替代触发器,请参阅this video for morethis blog post

在这两种方法中,我建议只在数据库中保留即将推出的触发器。因此,在处理完作业后删除它们。这样你知道它不会永远增长,而是会有某种固定的大小。实际上,您可以非常有效地查询它,因为您知道您只需要读取在下一个触发时间之前安排的作业。

如果您在实施方法时遇到问题,我建议您共享minimum code that reproduces where you're stuck,因为这样会更容易提供具体的帮助。