【问题标题】:Firebase data gets overwritten ! sought guidanceFirebase 数据被覆盖!寻求指导
【发布时间】:2015-09-26 15:24:21
【问题描述】:

我正在使用 Firebase 构建一个 Angular 应用程序。

我的目的是在根目录创建一个对象(比如 Rooms),其中包含 3 个子对象(比如 Room1、Room2 和 Room3)。另外,我正在尝试创建一个逻辑来检查 Rooms 对象是否存在 - 它不会再次创建它。

我的代码是:

var ref = new Firebase(firebaseURL);
ref.child('Rooms').once('value', function (snapshot){
  if(snapshot.numChildren() == 0){
    // Create Room within a loop
    ref.child('Rooms').child(i).set(roomObj);
  }else if(snapshot.numChildren() > 0){
    // do not create
  }
}

但是当代码运行时 - 它总是进入if 块!并创建子房间。

我的代码有什么错误??

【问题讨论】:

    标签: javascript firebase angularfire


    【解决方案1】:

    value 事件很可能会以您期望的值再次触发。

    您的解决方案是在事务中运行代码。

    var ref = new Firebase(firebaseURL);
    ref.child('Rooms').transaction(function (data){
      if(!data){
        var rooms = {};
        for (var roomNum=0; roomNum < 3; roomNum++) {
          rooms['room'+roomNum] = { name: 'Room '+roomNum };
        }
        return rooms
      }
    }
    

    所以如果房间还不存在,上面的代码会创建它们。如果它们已经存在,则代码什么也不做(不返回值,保持数据不变)。

    请务必阅读Firebase documentation for transaction

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 2019-04-28
      • 1970-01-01
      • 2020-03-15
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多