制作无限期运行的cloud http函数

时间:2019-04-25 13:01:45

标签: javascript firebase firebase-realtime-database google-cloud-functions

克里斯·G的评论中回答: 使用setInterval代替,并删除while循环;该代码将无限连续地快速调用clearData。 (bron绝对比此设置更好,顺便说一句)

我需要制作一个http函数,该函数仅调用一次(在启动时),然后每5分钟运行一次以检查数据,如果该数据存在2小时,我们将其清除。

在我显示代码之前的几件事:

  1. 我们知道Google Scheduler,但选择不使用它。
  2. 我们知道我们可以在需要时使用cron-jobs来调用html,但这将意味着另外一项服务,而我的目标是让该函数自行运行而无需任何服务来调用它。

代码:

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);

exports.methodCaller = functions.https.onRequest((request, response) => {
  setTimeout(() => {
    while (true) {
      clearData();
      console.log('methodCaller execution')
    }
  }, 30000); // currently 30 seconds for testing purposes but will be 5 hours later on
});

function dataChecked() {
  admin.database().ref('/logs/')
    .once("value")
    .then(snapshot => {
      console.log(snapshot.val());
      //code that checks data
    });
}
  1. 这是我使函数超时的正确方法。我希望它每5分钟手动触发一次,以检查一些数据。

  2. http请求需要一个响应,但是如果我将它放在while(true)语句中,它只会记录两次。

  3. 我的代码完全正确吗?

2 个答案:

答案 0 :(得分:3)

  

我需要制作一个http函数,该函数仅调用一次(在启动时),然后每5分钟运行一次以检查数据,如果该数据存在2小时,我们将其清除。

为此,您应该使用计划功能,Firebase现在支持该功能。请参阅博客文章Scheduling Cloud Functions for Firebase (cron),其中包含与您的用例非常相关的示例:

export scheduledFunctionPlainEnglish =
functions.pubsub.schedule('every 5 minutes').onRun((context) => {
    console.log('This will be run every 5 minutes!');
});

您现在尝试实现用例的方式将不起作用。在终止函数实例之前,Cloud Functions的硬上限为9分钟。

答案 1 :(得分:1)

您想做的事情是不可能的,您可以为云功能设置的最大时间通常为540秒(9分钟)。

我有一个函数,它具有最大超时时间,但是通常超时是60秒。如果您想每5个小时运行一次,只需在cron作业中运行它,或者设置一个VPS并在那里启动程序即可。

云功能不是您要寻找的功能,而且您不想为此付出计算时间。