【问题标题】:Once I update to firebase using angularfire2 my website freezes一旦我使用 angularfire2 更新到 firebase,我的网站就会冻结
【发布时间】:2018-07-22 02:16:32
【问题描述】:

我有一个包含九个字段的表单。用户将填写这些字段,然后他将单击保存按钮。 保存按钮会将这些信息从它们转换为一个对象并将它们发送到我的服务,其中一个特定的功能将检查该节点是否存在于firebase中,如果它存在,它将更新。如果没有,它将被创建。 问题是第一次按下按钮保存将始终有效。但我的网站第二次冻结。我正在使用 angular2 和 angularfire2。 抱歉,它基本上进入了一个无限循环,导致我的网站在第二次单击保存按钮后冻结。

constructor(private db:UserInfoService) {
this.items =   
this.db.getData().subscribe(snapshot=>this.getAllData(snapshot.val()));

  }

getData(){

 return this.db.object('users/71933808',{ preserveSnapshot: true });

  }

savedata(path,userInfo){
this.db.object(`users/${path}/`,{ preserveSnapshot: true })
    .subscribe(snapshot => {
        if(snapshot.exists()) {
          this.addingUserInfo(userInfo);
        }else{

         this.updatingUserInfo(userInfo);
        }
    });
     }

在这种方法中,我正在创建我的对象以将其传递给 savedata 函数:

loging(user,placeholder){
   placeholder = placeholder.replace(/\s/g, '');

   this.items[''+placeholder+'']=user;

   }
getAllData(item:any){
  this.items = item;

}

saveData(){

  this.db.savedata('71933808',this.items);

  }

【问题讨论】:

  • 你能用你的代码更新你的问题吗?谢谢
  • 问题出在 .exists() 函数上,它造成了无限循环,我不知道如何检查节点是否存在。
  • Id 它不存在,if(snapshot) { 就足够了。你不需要 .exist,它会返回 null
  • 而函数addingUserInfo向firebase添加了一些东西没有?
  • 是的,它确实增加了一些东西

标签: angular firebase firebase-realtime-database angularfire2


【解决方案1】:

我想我明白你的问题了!

你订阅了

db.object('yourPath')

在订阅中,您调用 updatingUserInfo() 来修改 Firebase 中“yourPath”的内容。

所以 db.object('yourPath') 会改变它的内容。并且会重做订阅函数然后updatingUserInfo()

这就是你有一个无限循环的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-10
    • 2012-04-07
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多