2015-07-08 2 views
0

Я создаю угловое приложение с Firebase.Данные Firebase перезаписываются! искал руководство

Мое намерение состоит в том, чтобы создать объект (например, «Комнаты») в корне с тремя дочерними объектами (например, 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 блок !! И создает детский номер.

Какая у меня ошибка в коде ??

ответ

0

Скорее всего, событие значения будет вызвано снова с ожидаемым значением.

Ваше решение - запустить код в транзакции.

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.

Смежные вопросы