HTTPS请求更新数组中的数据

时间:2019-04-10 06:35:29

标签: javascript typescript firebase google-cloud-firestore

我以前曾对此事提出过疑问,但仍然有些困难。我正在尝试解决以下问题: -每当添加文档时,都需要在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秒后超时。我认为正在发生的事情是我没有正确地附加文档,因为我使用第一个函数向其中添加内容的数组没有保存数据。但是我不确定如何解决此问题。帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您的testDelay函数将始终超时,因为它从不向客户端发送响应。 According to the documentation

  

使用res.redirect(),res.send()或res.end()终止HTTP函数。

如果您未在响应对象上调用这些方法之一,则Cloud Functions不会终止您的函数,并且会超时。

请注意,如果您在HTTP类型的函数中执行异步工作(例如文档更新),则只有在解决了这些异步操作的所有承诺后,才必须发送响应。