#firebase #google-cloud-functions
#firebase #google-cloud-функции
Вопрос:
Я изо всех сил пытался понять, почему моя функция Firebase Cloud не работает.
Я удаляю зарезервированный номер в коллекции под названием «anglerNumbers», когда зарегистрировался новый пользователь и когда был создан документ этого пользователя. Я использую это на клиенте, чтобы убедиться, что зарезервированный номер не может быть использован дважды. Я следую документации здесь: https://firebase.google.com/docs/firestore/query-data/queries?authuser=0 (Используя Node.js )
Но я продолжаю получать ошибку: ошибка типа: моментальный снимок.forEach не является функцией
Вот функция:
exports.newUser = functions.firestore.document('users/{userId}')
.onCreate((snap, context) => {
const newUserNumber = snap.data().anglerNumber;
const anglersRef = admin.firestore().collection('anglerNumbers');
const snapshot = anglersRef.where('anglerNumber', '==', newUserNumber).get();
if (snapshot.empty) {
console.log('No matching documents.');
return;
}
snapshot.forEach(doc => {
console.log(doc.id, '=>', doc.data());
doc.delete();
});
})
Он не регистрирует в консоли «Нет совпадающих документов». Итак, есть документы, но я не могу выполнить forEach, как указано в документации. Чего мне не хватает? Спасибо!
Комментарии:
1.
get()
возвращает обещание. Сначала вам следует дождаться его разрешения.
Ответ №1:
в этой строке вашего кода:
const snapshot = anglersRef.where('anglerNumber', '==', newUserNumber).get();
Вы предполагаете, что get немедленно преобразуется в моментальный снимок, но на самом деле get() возвращает обещание, которое преобразуется в моментальный снимок. Вам нужно дождаться этой асинхронной функции.
Либо используйте await, если это возможно в вашем контексте, либо используйте:
anglersRef.where('anglerNumber', '==', newUserNumber).get().then((snapshot)=>{
//do you processing
});
Комментарии:
1. Спасибо! Метод .then не сработал, но я смог использовать упомянутую вами альтернативу async / await. Спасибо 🙂