Невозможно проанализировать снимок Firebase с Node.js - PullRequest
0 голосов
/ 12 июня 2018

У меня есть запрос, и он возвращает снимок;

ref.orderByChild("index").equalTo(currentIndex).once("value", function(snapshot) {})

Когда я печатаю снимок с помощью;

console.log(snapshot.val());

, он печатается следующим образом:

{'-LBHEpgffPTQnxWIT4DI':
    {
        date: '16.05.2018',
        first: 'let me in',
        index: 1,
        second: 'let others in'
    }
},

Мне нужно взять дату валютирования, первое значение этого снимка.

Я пытался;

childSnapshot.val()["first"] 
childSnapshot.val()["date"] 

или

childSnapshot.child.('first') 
childSnapshot.child.('date') 

, но безуспешно.

Пожалуйста, укажите мне ошибку, которую я делаю ...

Мой полный код указан ниже;

var indexRef = db.ref("/LastIndex/");
var ref = db.ref("/Source/")

indexRef.on("value", function(indexSnapshot) {
    console.log(indexSnapshot.val());

    var currentIndex = indexSnapshot.val()

    ref.orderByChild("index").equalTo(currentIndex).once("value", function(snapshot) {
        console.log(snapshot.val());

        if(snapshot !== null) {
            snapshot.forEach(function (childSnapshot) {

            if(childSnapshot !== null) {
                var newRef = db.ref("/ListTest/");
                var key = newRef.push({
                    "firstLanguageWord": childSnapshot.val()["first"] ,
                    "secondLanguageWord": childSnapshot.val()["second"] ,
                    "wordType": childSnapshot.val()["type"],
                    "date": childSnapshot.val()["date"],
                    "translateType": childSnapshot.val()["transType"]
                });

                currentIndex++;
                indexRef.set(currentIndex);
            }
        });
    }
});

BR,

Erdem

1 Ответ

0 голосов
/ 12 июня 2018

Обновите, следуя приведенным ниже комментариям и обновив исходный вопрос:

Если кажется, что ваш код "бесконечно повторяется", то это потому, что вы используете метод on ()с вашим первым запросом.Фактически, метод on() «прослушивает изменения данных в определенном месте», как объяснено здесь .

Если вы просто хотите один раз запросить ссылку, используйтеметод once() вместо.Документ здесь .


Ниже приведен Запрос , потому что вы вызываете метод orderByChild() для Ссылка (а также метод equalTo()).

ref.orderByChild("index").equalTo(currentIndex)

Как объяснено здесь в документе:

Даже при наличии только одного совпадения длязапрос, снимок остается списком;он просто содержит один элемент.Чтобы получить доступ к элементу, вам нужно перебрать результат:

ref.once('value', function(snapshot) {  
  snapshot.forEach(function(childSnapshot) {
    var childKey = childSnapshot.key;
    var childData = childSnapshot.val();
    // ...   
   }); 
});

Итак, вы должны сделать:

ref.orderByChild("index").equalTo(currentIndex).once("value", function(snapshot) {
     snapshot.forEach(function(childSnapshot) {
        console.log(childSnapshot.val().first);
        console.log(childSnapshot.val().date);      
       }); 
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...