【问题标题】:Check if data exist in Firebase database with Angular使用 Angular 检查 Firebase 数据库中是否存在数据
【发布时间】:2020-11-02 01:29:14
【问题描述】:

我正在使用与 Firebase 控制台连接的 Angular 进行 Web 项目,我使用在我的服务类中定义的这个函数在保存之前验证数据库中是否存在该值,当我在我的组件中调用这个函数时,我通常会得到 未定义值。

这是我的服务功能:

  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;
});  
}

【问题讨论】:

标签: javascript angular firebase firebase-realtime-database


【解决方案1】:

数据是从 Firebase 异步加载的。您的 return false 在您的 if (snapshot.exists()){ 被调用之前运行,因此您将始终返回 false。

解决办法是返回一个promise:

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);

另见:

【讨论】:

  • 你好 @Frank 抱歉,但它不起作用我通常会在我的组件中得到 null
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 2017-05-27
  • 1970-01-01
  • 1970-01-01
  • 2017-12-04
  • 2020-12-17
相关资源
最近更新 更多