Проблема в том, что вы не возвращаете обещание от функции, которая разрешает данные для отправки вызывающей стороне. Прямо сейчас ваша функция фактически ничего не возвращает, потому что once()
является асинхронным и возвращается непосредственно перед завершением запроса. Когда вызываемая функция возвращается без обещания, она немедленно закрывается, любая асинхронная работа не будет завершена.
Кроме того, вы должны заметить, что операторы return внутри обратных вызовов, которые вы передали сразу (), являются только возвращаемыми значениями. из этих отдельных функций обратного вызова, а не всей функции.
Вместо этого вы должны использовать обещание, возвращаемое once()
, и использовать его для определения того, что возвращать клиенту. Вот простой пример:
return rootRef.once("value")
.then(snapshot => {
console.log("Passed value ", snapshot);
return { data: snapshot.val() }
})
.catch(error => {
console.log("ERROR:\n" + error);
return { teams: [] };
});
Для эффективного написания облачных функций вам необходимо полностью понять, как работают javascript обещания. Если вы не будете правильно с ними работать, ваши функции не будут работать таинственным образом.