Firebase 如何按顺序运行多个Firestore函数?

Firebase 如何按顺序运行多个Firestore函数?,firebase,google-cloud-functions,Firebase,Google Cloud Functions,我们有20个功能必须每天运行。这些函数中的每一个都根据前一个函数的输入执行不同的操作 我们尝试在一个函数中调用所有函数,但它遇到了超时错误,因为这20个函数花费的时间超过了 如何按顺序触发这些多个函数,或者如何避免一个函数执行其中每个函数时出现超时错误?没有配置或简单的方法来完成此操作。您必须设置大量的代码和基础设施才能完成这项工作 最简单的解决方案涉及使用链接将调用链接在一起。您可以向pubsub主题发送一条消息,该消息将触发下一个要运行的函数。要发送的消息的有效负载可以是函数用于确定其应如何

我们有20个功能必须每天运行。这些函数中的每一个都根据前一个函数的输入执行不同的操作

我们尝试在一个函数中调用所有函数,但它遇到了超时错误,因为这20个函数花费的时间超过了


如何按顺序触发这些多个函数,或者如何避免一个函数执行其中每个函数时出现超时错误?

没有配置或简单的方法来完成此操作。您必须设置大量的代码和基础设施才能完成这项工作

最简单的解决方案涉及使用链接将调用链接在一起。您可以向pubsub主题发送一条消息,该消息将触发下一个要运行的函数。要发送的消息的有效负载可以是函数用于确定其应如何操作的参数。如果有效负载太大,或者需要一些更复杂的数据源来做出决策,则可以使用数据库来存储中间数据,以便下一个函数可以查询和使用


由于我们没有关于函数实际工作方式的任何更具体的细节,因此没有更具体的内容。如果您在该方案的具体细节方面遇到问题,请再次发布,详细说明您正在尝试做的事情以及哪些事情没有按您预期的方式工作。

Doug解决方案有一个变体。在函数末尾,只需编写一个特定的日志(例如“end”),而不是将消息发布到pubsub中

然后,转到stackdriver日志记录,搜索此特定日志跟踪(启用高级过滤器),并将接收器配置为此日志项的PubSub主题。因此,每次检测到日志时,发布带有日志内容的PubSub消息

最后,插入此子主题的下一个函数

如果需要将值从函数传递到另一个函数,只需将这些值添加到函数末尾的日志跟踪中,并在下一个函数开头对其进行解析即可


链接函数不是一件容易的事情。事情即将发生,也许Google Cloud Next将发布新产品来帮助您完成这项任务。

如果您只想让函数按顺序执行,而不需要将一个函数的结果直接传递给下一个函数,您可以将它们包装在一个计划函数()中,该函数将为每个函数留出足够的运行时间

以下草图,间距为3分钟:

exports.myScheduler = functions.pubsub
.schedule('every 3 minutes from 22:00 to 23:00') 
.onRun(context => {
  let time = // check the time
  if (time === '22:00') func1of20();
  else if (time === '22:03') func2of20();
  // etc. through func20of20()
}

如果您确实需要将每个函数的结果传递给下一个函数,
func1
可以将其结果存储在DB条目中,然后
func2
开始读取该结果,结束时覆盖自己的结果,以便
func3
可以在3分钟后触发时读取,等等-尽管在这种情况下,其他解决方案更适合您的需要

你能用预定的函数只运行一分钟吗?(假设您将每个函数的结果存储到DB条目中。)Firebase支持cron语法。您的意思是指定这些函数应该运行的时间吗?如果是,我们无法估计每个函数运行所需的时间,因此无法安排在特定时间。如果您的意思是我们在第一个函数完成1分钟后在调度程序中分离,那就是我们想要的。我们如何才能做到这一点?谢谢你的建议!我们今天将对此进行测试并返回。谢谢您的建议!我们确实读过云计算子主题,但还没有测试过。我们今天就试试,然后回来。