HTTP-запрос на обновление данных в массиве - PullRequest
0 голосов
/ 10 апреля 2019

Я уже задавал вопросы по этому вопросу и все еще немного застрял. Я пытаюсь решить следующее: - Всякий раз, когда документ добавляется, его необходимо обновить через некоторое время (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 голосов
/ 10 апреля 2019

Ваша функция testDelay всегда будет иметь тайм-аут, потому что она никогда не отправляет ответ клиенту. Согласно документации :

Завершение функций HTTP с помощью res.redirect (), res.send () или res.end ().

Если вы не вызовете ни один из этих методов для объекта ответа, облачные функции не прекратят выполнение вашей функции и истечет время ожидания.

Обратите внимание, что если вы выполняете асинхронную работу (например, обновление документа)в функции типа HTTP вы должны отправлять ответ только после того, как все обещания от этих асинхронных операций разрешены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...