2016-12-07 2 views
0

Бит путают, почему это не сработает.Firebase using JS - Стреляйте, чтобы обновить значение, если оно существует или добавлено, если оно не

 const person = {}; 
     person[this.name] = 0; 

     const personQuery = `person/${this.name}`; 
     firebase.child(personQuery).on('value', (snapshot) => { 
     if (snapshot.exists()) { 
      // Update 
      console.log('exists'); 
     } else { 
      console.log('creating'); 
      firebase.child('person').set(person, (err) => { 
      if (err) { 
       throw err; 
      } 
      }); 
     } 
     this.name = ''; 
     }); 

Мои данные выглядит так, если я избавлюсь от логики обновления и просто логику настройки:

Билл: 0,

Джон: 0,

Бет: 0

и т.д.

Если запись существует, то он не имеет проблему (с Я даже не делаю этого обновления), но если это не так, он просто переходит в сумасшедший цикл, и в конце концов я получаю одно значение в моей таблице.

Я думаю, что я неправильно истолковываю, как структурировать свои данные.

Я в основном хочу сделать супер простое приложение с ключом пары людей, у каждого человека есть одно единственное число, и если человек уже существует, то увеличивайте значение на единицу.

Может ли кто-нибудь помочь мне с пониманием того, как создать структуру и запросить ее для создания обновлений?

ответ

1

Вы ищете once(). Поскольку вы только хотите проверить, существует ли в настоящее время узел пользователя и не хотят его синхронизировать. Итак:

firebase.child(personQuery).once('value', (snapshot) => { 
    if (snapshot.exists()) { 
     // Update 
     console.log('exists'); 
    } else { 
     console.log('creating'); 
     firebase.child('person').set(person, (err) => { 
     if (err) { 
      throw err; 
     } 
     }); 
    } 
    this.name = ''; 
    }); 

Но в целом такой сценарий требует use of a transaction. С транзакцией вы получаете текущее значение и указываете новое значение атомарно. Это удаляет условие гонки, существующее в вашем текущем коде.

+0

Awesome thanks! Я сейчас от кода, но я постараюсь завтра и отчитаюсь, спасибо большое –

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