有可能在谷歌云功能中放入计时器吗



我想在我的谷歌云功能中设置一个计时器。我在更新时有一个数据库触发器。我试过这种方法,但似乎不起作用。

const functions = require('firebase-functions');
exports.timer = functions.firestore
.document("/kullanici/{uid}")
.onUpdate((change,context) => {
const newfieldvalue = change.after.data();
const dolfieldvalue = change.before.data();
if(newfieldvalue.minebuildtime ===dolfieldvalue.minebuildtime){
let x= newfieldvalue.minebuildtime;
setTimeout(function(){
//do some database update here after x seconds;
},x);
}
return null;
});

当您的云函数从其顶级返回时,您不能假设会发生任何进一步的逻辑或处理。这在名为"函数执行时间轴"的部分中有记录。

这不会按您预期的方式工作,因为在函数返回后,Cloud Functions运行时将占用资源。由于函数会立即返回null,这意味着Cloud Functions会阻止计时器触发。

唯一能让这段时间发挥作用的方法是,除了函数启动的所有其他异步工作外,还返回一个仅在计时器完成执行后才能解析的promise。

更复杂的是,当一个功能超时(默认60秒,可配置的最长9分钟(时,计时器肯定永远不会触发。

综合考虑,使用setTimeout设置延迟执行既容易出错,在某些情况下也是不可能的。我会避免它。如果你碰巧正确地实现了它,请准备好为函数等待完成工作所花费的时间付费。

如果你想延迟云函数中某些工作的执行,最好与云任务集成,这样你就可以推迟一些工作,然后调用HTTP函数。

最新更新