Первым делом - вы не можете отложить запись в Firestore с помощью облачных функций. Я не могу точно сказать, пытаетесь ли вы здесь это сделать, но если это так, вы должны отказаться от этой идеи прямо сейчас. Облачные функции срабатывают только после , некоторые действия уже выполнены. Вы не можете перехватить запись. Вы можете предотвратить запись с помощью правил безопасности, но правила безопасности не позволяют эффективно задерживать запись. Запись произойдет как можно быстрее.
Предполагая, что вы действительно хотите просто что-то сделать с задержкой после записи происходит, вы можете использовать setTimeout, но помните, что вы платите за время ЦП, связанное с этими 5 секундами.
Поскольку фоновые функции требуются для возврата обещания, которое разрешается только после того, как весь фон завершен, вам необходимо создать и организовать разрешение, которое будет выполнено для этого обещания после истечения времени ожидания и после завершения любой другой асинхронной работы. Поскольку вы используете 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));
}