Как вы можете логически проверить, существуют ли данные firebase 'child_added' и предоставить логику для обработки? - PullRequest
0 голосов
/ 25 апреля 2019

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

Если я изменю «child_added» на «значение», он будет выполнять существующий код, но тогда он не будет содержатьЗначение snap.key, которое мне нужно от дочернего узла.

Должен быть простой способ закодировать это?

    firebase.database().ref('users').child(props.currentUser.uid).child('traits').orderByChild('field').equalTo(traitName).once('child_added', snap => {

    if (snap.exists())
    {
        console.log('found');
    } 
    else{
        console.log('did not find');
    }
}).then(() => {
    runprocess(traitName, traitValue);
});

1 Ответ

0 голосов
/ 25 апреля 2019

Нет способа определить, нет ли данных только с child_*, для этого вам понадобится слушатель value.

Для обработки нескольких потомков, которые получает событие value, вы можете использовать:

firebase.database().ref('users').child(props.currentUser.uid).child('traits').orderByChild('field').equalTo(traitName).once('value', snapshot => {
  if (snap.exists()) {
    console.log('found');
    snapshot.forEach(function(child) { 
      console.log(child.key); 
    })
  } 
  else{
    console.log('did not find any children');
  }
})

Если вы заботитесь только о том, существует ли какой-либо ребенок и не нуждаетесь в других детях, вы можете ограничить запрос одним результатом:

firebase.database().ref('users')
     .child(props.currentUser.uid).child('traits')
     .orderByChild('field').equalTo(traitName)
     .limitToFirst(1)
     .once('value', snapshot => {

Но вам все равно понадобится вызов forEach, поскольку API не знает, что будет только результат - или, по крайней мере, он не перегружен в этой ситуации.

Вы также можете комбинировать события child_* и value. Firebase будет извлекать данные только один раз за кулисами, поэтому использование нескольких прослушивателей для одних и тех же данных не наказывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...