我在firebase函数上有一个定时器函数。
下面的代码
exports.timecontroller = functions.region('europe-west1').firestore.document("DigitalTargets/{digitalTargetID}").onCreate((snap, context) => {
const id = snap.id
const date = new Date(snap.data().endDate.toDate())
var countDownDate = date.getTime();
var myfunc = setInterval(async function () {
var now = new Date().getTime();
var timeleft = countDownDate - now;
db.collection('DigitalTargets').doc(snap.id).get().then(a => {
if (!a.data().isClaimed) {
console.log(timeleft)
if (timeleft < 0) {
db.collection("DigitalTargets").doc(id).update({ isActive: false })
clearInterval(myfunc);
}
}
else {
clearInterval(myfunc);
}
})
}, 1000);
return true;
})
我的问题是,当我创建一个文档,它开始计数。我可以在日志屏幕上看到。但10分钟后就停止工作了。没有显示更多的日志。过期后它不会停用doc
我需要什么:我在地图上标出目标,他们有结束时间。我只是想在计时器完成后设置活动false。
对firebase函数有任何限制吗?如果有的话,我会用定时功能每5分钟检查一次。
From the docs:
The maximum value for timeoutSeconds is 540, or 9 minutes.
https://firebase.google.com/docs/functions/manage-functions
如前所述,您可以使用调度函数:exports.myCrontabFunction = functions.pubsub.schedule("every 5 minutes")
.timeZone("Europe/Berlin")
.onRun(async (context) => { ... } );
听起来你正在使用一个事件驱动函数,当你创建一个文档时开始。
根据这个公共文档,你可以看到即使驱动函数在10分钟后超时。
另一种选择可能是让事件驱动的函数在60分钟以外的时间内向另一个函数发出http请求。