首页 > 解决方案 > Firebase 云功能中的发布/订阅如何工作?

问题描述

我正在构建一个关于使用 firebase 进行工作日程管理的 Web 应用程序。流程是:

-创建班次计划模板:

template = {
    schedule : [
      {
        day : 'Monday',
        work_time : '10am-6pm'
      },
      {
        day : 'Tuesday',
        work_time : '8am-3pm'
      }
    ],
    from_date : '2021/01/25',
    to_date : '2021/05/25'
  }

-在用户上创建班次:将模板添加到用户班次或编辑模板

所以基本上,我需要传递用户的模板数据来订阅云调度程序,以便在日期范围内每天添加到用户的班次中。

shift = {
   user_id : 'user_id',
   day : 'Monday',
   work_date : '2021/01/25',
   work_time : '10am-6pm',
  }
 // on the next day auto create
 shift = {
   user_id : 'user_id',
   day : 'Tuesday',
   work_date : '2021/01/26',
   work_time : '8am-3pm'
  }

- 在用户轮班编辑模板时,我需要取消订阅调度程序。

- 在模板创建中,有一个按钮可以停止对拥有该模板的所有用户创建班次。

我有任何意义吗?请帮助我的用例。可能吗?

标签: firebasegoogle-cloud-firestorecrongoogle-cloud-functionsscheduled-tasks

解决方案


在某些用例中,每天午夜(或根据用例随时)将模板/初始数据添加到数据库中是很常见的,以便可以在某处更新或列出。

在每个用户的班次编辑模板时,我需要取消订阅调度程序。

在创建模板时单击停止创建按钮时,我还需要取消订阅所有相关用户的调度程序。

没有直接的方法可以做这样的事情。当用户开始编辑他们的班次时,您必须首先将其存储在数据库中。在您的计划功能中,您可以检查(从数据库)是否正在编辑任务。如果是,则跳过它并继续其他人。

另外, “所有相关用户的调度程序”是什么意思?理想情况下,您将拥有一个处理所有用户的云功能,而不是为每个用户提供一个专用的发布/订阅主题。您只需按照与第一种情况相同的方式,如果用户单击了该停止按钮,则将其存储在数据库中,并且在您的函数运行时不处理该用户。


推荐阅读