我创建了一个firebase功能,通过他们的API从两个网站获取数据。
我希望触发一次该功能/脚本,然后定期请求这两个网站。
我写的代码:
setInterval(() => {
rootRef.on('value', (snap) => {
airtableApiKey = snap.val().airtable_key;
airtableBase = snap.val().airtable_base;
orionxApiKey = snap.val().orionx_key;
orionxApiSecret = snap.val().orionx_secret;
functionTimer = snap.val().function_timer;
functionStatus = snap.val().function_status;
geminiCoin = snap.val().gemini_coin;
orionxCoin = snap.val().orionx_coin;
if (!isNaN(Number(functionTimer)) && Number(functionTimer) !== 0 && functionStatus.toString().toLowerCase() === 'on') {
trigger(airtableApiKey, airtableBase, orionxApiKey, orionxApiSecret, functionTimer, functionStatus, geminiCoin, orionxCoin).catch(err => console.log(err));
}
});
}, Number(functionTimer) * 1000);
exports.helloWorld = functions.https.onRequest((req, res) => {
});
在这种情况下,setInterval中的代码执行大约一分钟然后自动停止。
我尝试在快速路由中移动setInterval代码,给出相同的结果。
像这样:
exports.helloWorld = functions.https.onRequest((req, res) => {
setInterval(() => {
rootRef.on('value', (snap) => {
airtableApiKey = snap.val().airtable_key;
airtableBase = snap.val().airtable_base;
orionxApiKey = snap.val().orionx_key;
orionxApiSecret = snap.val().orionx_secret;
functionTimer = snap.val().function_timer;
functionStatus = snap.val().function_status;
geminiCoin = snap.val().gemini_coin;
orionxCoin = snap.val().orionx_coin;
if (!isNaN(Number(functionTimer)) && Number(functionTimer) !== 0 && functionStatus.toString().toLowerCase() === 'on') {
trigger(airtableApiKey, airtableBase, orionxApiKey, orionxApiSecret, functionTimer, functionStatus, geminiCoin, orionxCoin).catch(err => console.log(err));
}
});
}, Number(functionTimer) * 1000);
});
答案 0 :(得分:1)
您无法在云功能中无限期地运行功能。它不受支持。所有功能最终都会超时。默认值为60秒,云控制台中的配置最大值为9米。
如果您想安排在云功能中完成一些工作,则需要提供自己的调度程序。该团队正在研究如何安排活动,但该解决方案没有时间表。
云功能旨在尽快完成工作。它们不适用于无限长的任务。如果您需要无限期地运行某些代码,请使用App Engine或您控制的其他容器。