Вам необходимо вернуть обещание, возвращенное асинхронным методом set()
, следующим образом:
export const createNewUser = functions.auth.user().onCreate(user => {
const userId = user.uid;
const updateData = {
ads_watched: 0,
coins: 20000,
gems: 0
};
return admin.firestore().doc("cashon/" + userId)
.set(updateData)
.then(() => {
console.log("User Created result:", writeResult);
return null;
})
.catch(err => {
console.log(err);
return null;
});
});
Как указано в «Функция вернула неопределенное, ожидаемое обещание или значение»ошибка, вы ДОЛЖНЫ вернуть Promise или значение в фоновой запущенной облачной функции, чтобы указать платформе, что облачная функция завершена. Поскольку вы не возвращаете Обещание, вы сталкиваетесь с этим противоречивым поведением: иногда облачная функция отключается платформой до того, как она записывает в Firestore.
Я бы посоветовал вам посмотреть 3 видео о "Обещаниях JavaScript" изсерия видеороликов Firebase Дуга Стивенсона (https://firebase.google.com/docs/functions/video-series/),, которая объясняет этот ключевой момент.
Также обратите внимание, что метод set()
возвращает Promise<void>
.
И, наконец,Обратите внимание: если вам не нужен console.log("User Created result:", writeResult);
, вы можете сделать следующее:
export const createNewUser = functions.auth.user().onCreate(user => {
const userId = user.uid;
const updateData = {
ads_watched: 0,
coins: 20000,
gems: 0
};
return admin.firestore().doc("cashon/" + userId)
.set(updateData)
.catch(err => {
console.log(err);
return null;
});
});