Я закодировал функцию для отправки запроса в мою базу данных и получения результата. Но если он ничего не находит в базе данных, он ничего не возвращает ни undefined
, ни null
.
По этой причине я не могу понять, существуют ли данные в базе данных или нет.
Какое значение возвращается этой функцией?
Код:
usersRef
.where("nickname", "==", nickname)
.get()
.then((querySnapshot) => {
querySnapshot.forEach((doc) =>
doc.data() ? console.log("a") : console.log("b")
);// i wrote this line for testing the issue
querySnapshot.size == 0 ? (flag = true) : (flag = false);
})
.catch((err) => console.log("err2"))
Если данные существуют в базе данных, он печатает a
, но если нет, он ничего не печатает, ни a
, ни b
.
Я использовал этот код в своем проекте React-Native, он также использует базу данных Firebase Firestore, а usersRef
означает:
const db = firebase.firestore();
const usersRef = db.collection("Users");
Примечание. querySnapshot
всегда возвращает объект firebase в формате JSON. Параметры doc
в forEach
возвращают объект, если он существует в формате JSON, но в противном случае его нельзя обработать.
Примечание 2: я также пробовал doc.data()== null
, doc.data()== undefined
или doc.data()== ""
. Но они ничего не печатают в console.log()
. Я тоже пробовал console.log(doc.data())
и ничего не изменилось.
console.log(doc.data())
ничего не регистрирует? — person Leo S schedule 20.01.2021
Если данные существуют в моей базе данных, он возвращает данные, в противном случае они не регистрируются. @ Daniel_Knights — person Leo S schedule 20.01.2021
Вы входите вне forEach
? Единственная причина, по которой я ничего не вижу, это querySnapshot
имеет длину 0
. — person Leo S schedule 20.01.2021
Это потому, что вы запрашиваете базу данных и получаете обратно массив. Если в вашем массиве 1 или более элементов, ваш вызов
.forEach
будет перебирать их и выполнять ваше тернарное выражение, что приводит к вызову журнала консоли — либоa
, либоb
. Однако, если ваш массив пуст, тогда.forEach
нечего будет перебирать, и поэтому функция, которую вы ему передаете, никогда не будет выполнена.Итак, проблема в том, что ваш запрос к базе данных просто возвращается пустым в вашем окне Windows. Проверьте свою
flag
переменную или член.size
, и вы должны увидеть, так ли это: