在javascript/typescript代码中为云函数设置超时



我目前正试图通过cloud firestore延迟一些操作,但setTimeout/setInterval似乎不适用于我的代码。

export const onTimerCreate = functions.firestore
.document("File/One")
.onCreate((snapshot, context) => {
setTimeout(countdown, 5000);
const messageData = snapshot.data()
const delay = countdown()
return snapshot.ref.update ({ delay : delay })
})
function countdown() {
return 0
}

我正在努力确保快照在延迟5秒后更新为新值,但每次都会立即发生。。。不知道该怎么办?

第一件事是,使用Cloud Functions不能延迟对Firestore的写入。我不能确定你在这里是否想这么做,但如果是的话,你现在就应该放弃这个想法。云功能仅在已执行某些操作之后触发。您无法拦截写入。您可以使用安全规则阻止写入,但安全规则不会有效地允许您延迟写入。写入将尽可能快地进行。

假设您确实想在写入发生后延迟执行某些操作,您可以使用setTimeout,但要注意,您要为与这5秒相关的CPU时间付费。

由于后台函数需要返回一个只有在所有后台完成后才能解析的promise,因此您需要创建并安排该promise在超时结束后以及任何其他异步工作完成后解析。由于您使用的是TypeScript(或者至少您在这里标记了它),async/await是完成这项工作的最简单方法:

export const onTimerCreate = functions.firestore
.document("File/One")
.onCreate(async (snapshot, context) => {
await sleep(5000)
const messageData = snapshot.data()
await snapshot.ref.update ({ delay : delay })
})
async function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}

相关内容

  • 没有找到相关文章

最新更新