Вы отправляете ответ вызывающей стороне в конце функции, которая будет выполнена до возвращения данных из базы данных. И Cloud Functions перестанут выполнять ваш код сразу после этого res.status(200).end()
, поэтому очистка базы данных никогда не произойдет.
Чтобы предотвратить это, отправляйте ответ вызывающей стороне только после того, как все данные будут удалены из базы данных:
exports.removeOldMessages = functions.https.onRequest((req, res) => {
const timeNow = Date.now();
const Ref = admin.database().ref('/Feed');
return Ref.once('value', (snapshot) => {
let updates = [];
snapshot.forEach((child) => {
if (1000*(child.val().timestamp + child.val().duration) >= timeNow) {
updates[child.key] = null;
}
});
return Ref.update(updates).then(() => {
return res.status(200).end();
});
});
});
Я настоятельно рекомендую хранить дополнительное свойство в ваших дочерних узлах, с предварительно рассчитанным значением timestamp + duration
. Имея такое свойство, вы можете запустить запрос на узлах, срок действия которых истек, вместо необходимости читать все дочерние узлы и затем фильтровать их в коде.
Пример этого см. В моем ответе на Удалите данные из базы данных старше 2 часов и пример Облачных функций , основанный на этом.