Решение состоит в том, чтобы дождаться завершения всех асинхронных update()
операций перед вызовом return: поскольку вы используете forEach()
l oop, вам необходимо использовать Promise.all()
для ждать завершения всех асинхронных операций, вызываемых в l oop, перед возвратом обещания, которое он возвращает.
Как объяснено в do c (ссылка выше), обычно используется Promise.all()
" после запуска нескольких асинхронных задач для одновременного запуска и создания обещаний для их результатов, чтобы можно было дождаться завершения всех задач ".
Следующие действия должны помочь:
export const count = functions.pubsub
.schedule('0 8 * * *')
.timeZone('Europe/Brussels')
.onRun(async context => {
const snapshot = await admin.database().ref('/counter').once('value');
const promises = [];
snapshot.forEach((child) => {
var info = child.val();
var dayViews = info['count'];
var ID = child.key;
var ref1 = admin.database().ref('/counter/' + ID);
promises.push(ref1
.update({
"count": 0,
"totalViews": dayViews,
}));
});
return Promise.all(promises)
});
О том, почему важно правильно обрабатывать асинхронные операции в облачной функции, я бы посоветовал вам посмотреть 3 видео о "JavaScript Promises" из серии видеороликов Firebase: https://firebase.google.com/docs/functions/video-series/