2017-01-09 2 views
0

Я попытался сохранить свойства моментальных снимков в массивах, но по какой-то причине, когда я храню данные внутри запроса, например, с on или child_added и запускать данные с помощью foreach, данные отображаются внутри цикла и запроса , но из этого его значение не определено, я пытался с объектами, но только спаял последнее значение. Как решить эту проблему?Как сохранить моментальный снимок в массиве с Firebase и JavaScript?

Вот фрагмент кода:

var array=[]; 
var ref= firebase.database().ref().child('messages'); 
ref.orderByChild("fecha").on('value',function(snapshot){ 
    snapshot.forEach(function(snap){ 
     //test array 
     array[0] = snap.val().text; 
     console.log(array[0]);//show the data 
    }); 
}); 

//but out of the loop 
console.log(array[0]);//Return undefined 
+0

'on' является асинхронным, и его обратный вызов не срабатывает до тех пор, пока не будет вызван последний вызов' console.log' в вашем фрагменте. – cartant

+0

Возможный дубликат [Обработка асинхронных вызовов (Firebase) в функциях] (http://stackoverflow.com/questions/11636731/handling-asynchronous-calls-firebase-in-functions) – cartant

ответ

3

console.log на дне работает перед тем один в петле. Это называется асинхронным кодом.

Вы не можете получить доступ к значениям, прежде чем они будут возвращены из API. Функция .on ожидает, что данные будут готовы, а затем запускаются, поэтому данные доступны.

Невозможно «сохранить» данные за пределами обратного вызова - единственное место, где вы знаете, что будет, будет внутри обратного вызова. Разумеется, вы можете передать его другой функции из обратного вызова, но нет способа извлечь его в положение вашего второго console.log.

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