Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase数据被覆盖!寻求指导_Javascript_Firebase_Angularfire - Fatal编程技术网

Javascript Firebase数据被覆盖!寻求指导

Javascript Firebase数据被覆盖!寻求指导,javascript,firebase,angularfire,Javascript,Firebase,Angularfire,我正在用Firebase构建一个Angular应用程序 我的意图是创建一个对象,比如根位置的Rooms,它有3个子对象,比如Room1、Room2和Room3。另外,我正在尝试创建一个逻辑来检查房间对象是否在那里——它不会再次创建它 我的代码是: var ref = new Firebase(firebaseURL); ref.child('Rooms').once('value', function (snapshot){ if(snapshot.numChildren() == 0){

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

我的意图是创建一个对象,比如根位置的Rooms,它有3个子对象,比如Room1、Room2和Room3。另外,我正在尝试创建一个逻辑来检查房间对象是否在那里——它不会再次创建它

我的代码是:

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块!!并创建子房间


我在代码中的错误是什么???

最有可能的是,值事件将以您期望的值再次触发

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

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
  }
}
因此,如果房间还不存在,上面的代码将创建它们。如果它们已经存在,则代码不返回值,不修改数据

一定要读这本书