gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:20:15 26 4
gpt4 key购买 nike

我目前正在尝试使用云 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 的写入。我不能确定这是否是你想要做的事情,但如果是这样,你应该立即放弃这个想法。 Cloud Functions 仅在某些操作发生后才会触发。您无法拦截写入。您可以使用安全规则阻止写入,但安全规则不会有效地允许您延迟写入。写入将尽快发生。

假设您确实只想在写入发生后延迟执行某些操作,则可以使用 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));
}

关于javascript - 在云函数的 javascript/typescript 代码中设置超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54298606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com