Проверьте, существуют ли данные в базе данных Firebase с Angular - PullRequest
0 голосов
/ 12 июля 2020

Я работаю над веб-проектом с Angular, подключенным к консоли Firebase, и я использовал эту функцию, определенную в моем классе обслуживания, чтобы проверить, существует ли значение в базе данных перед сохранением. Когда я вызываю эту функцию в своем компоненте, я обычно получить неопределенное значение .

Это моя служебная функция:

  ifExist(category : CategoryType){
    firebase.database().ref("/categories/").child("categories").orderByChild("category_name").equalTo(category.category_name)
.once( "value" , snapshot => {
  if (snapshot.exists()){
    const userData = snapshot.val();
    console.log("exists!", userData);
    return true;
  }
  return false;
});  
}

1 Ответ

0 голосов
/ 13 июля 2020

Данные загружаются из Firebase асинхронно. Ваш return false запускается до того, как ваш if (snapshot.exists()){ будет вызван, поэтому вы всегда будете возвращать false.

Решение состоит в том, чтобы вернуть обещание:

ifExist(category: CategoryType) {
  return firebase.database().ref("/categories/").child("categories")
    .orderByChild("category_name").equalTo(category.category_name)
    .once("value", snapshot => {
      if (snapshot.exists()) {
        const userData = snapshot.val();
        console.log("exists!", userData);
        return true;
      }
      return false;
    });
}

И использовать это при вызове функция, либо с:

ifExist(yourCategoryType).then((result) => {
  console.log("ifExist returned "+result);
});

Или с более современными async / await:

const result = await ifExist(yourCategoryType)
console.log("ifExist returned "+result);

См. также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...