克里斯·G的评论中回答: 使用setInterval代替,并删除while循环;该代码将无限连续地快速调用clearData。 (bron绝对比此设置更好,顺便说一句)
我需要制作一个http函数,该函数仅调用一次(在启动时),然后每5分钟运行一次以检查数据,如果该数据存在2小时,我们将其清除。
在我显示代码之前的几件事:
代码:
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
});
}
这是我使函数超时的正确方法。我希望它每5分钟手动触发一次,以检查一些数据。
http请求需要一个响应,但是如果我将它放在while(true)语句中,它只会记录两次。
我的代码完全正确吗?
答案 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并在那里启动程序即可。
云功能不是您要寻找的功能,而且您不想为此付出计算时间。