【问题标题】:How does pub/sub in firebase cloud function work?Firebase 云功能中的发布/订阅如何工作?
【发布时间】:2021-10-05 16:12:46
【问题描述】:

我正在构建一个关于使用 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'
  }

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

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

我有什么意义吗? 请帮助我的用例。有可能吗?

【问题讨论】:

    标签: firebase google-cloud-firestore cron google-cloud-functions scheduled-tasks


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我的意思是在模板创建中,有一个按钮可以停止为所有拥有该模板的用户创建班次。
    • @TorSenghok 你有这些模板的 Firestore 文档,以便你更容易解释吗?您可以添加一个字段,可能将false 存储在数据库中这些用户的文档中,然后不为他们创建模板?
    • 我认为当单击该按钮时,它基本上会停止自动向每个拥有该模板的用户班次添加模板数据。所以我的用例是许多 pubs to One sub,对吧?因此我无法取消订阅。
    • @TorSenghok 我的意思是,理想情况下,您将为所有用户运行一个云功能,而不是为每个用户运行一个单独的云功能。假设您在 Firestore 中有一个供用户使用的集合,其中每个文档都有一个“停止”字段。如果用户单击了停止按钮,则必须将此字段设置为 true,否则将其设置为 false。当您计划的云功能运行时,您将检查 stopped 字段设置为 false 的用户,即他们没有单击停止按钮。现在仅为这些用户添加模板
    • 我对这个 pub/sub 真的很陌生。你能告诉我如何将数据从客户端传递到云函数调度器吗?
    猜你喜欢
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 2021-02-27
    • 2021-10-31
    • 2020-12-28
    • 1970-01-01
    • 2021-12-03
    • 2020-12-01
    相关资源
    最近更新 更多