我以前曾对此事提出过疑问,但仍然有些困难。我正在尝试解决以下问题: -每当添加文档时,都需要在2小时后的某个时间对其进行更新
我目前的解决方法是: -我使用onCreate在文档创建时创建了时间戳 -我将文档附加到数组 -我还有另一个https函数,它每1分钟触发一次(作为cron作业),该函数检查数组中的项目,并将当前时间戳与文档的时间戳进行比较(这是数据库中的变量)
我拥有的代码如下:
const array = []
export const onTimerCreate = functions.firestore
.document(`Message/{UserId}/{ChatRoomId}/{UserId_1}`)
.onCreate((snapshot, context) => {
const timestamp = admin.firestore.Timestamp.now().seconds
array.push(snapshot)
return snapshot.ref.update({ creationTime: timestamp})
})
export const testDelay = functions.https.onRequest((request, response) => {
const timestamp = admin.firestore.Timestamp.now().seconds
array.forEach( snapshot => {
const data = snapshot.data()
const time = data.creationTime
const delay = (data.delay) / 1000
const actualTime = time + delay
console.log(array)
if (actualTime > timestamp) {
return snapshot.ref.update({ delay : 0})
}
})
})
但是,问题出在现在,请求仅在60秒后超时。我认为正在发生的事情是我没有正确地附加文档,因为我使用第一个函数向其中添加内容的数组没有保存数据。但是我不确定如何解决此问题。帮助将不胜感激。
答案 0 :(得分:0)
您的testDelay函数将始终超时,因为它从不向客户端发送响应。 According to the documentation:
使用res.redirect(),res.send()或res.end()终止HTTP函数。
如果您未在响应对象上调用这些方法之一,则Cloud Functions不会终止您的函数,并且会超时。
请注意,如果您在HTTP类型的函数中执行异步工作(例如文档更新),则只有在解决了这些异步操作的所有承诺后,才必须发送响应。