2017-01-09 79 views
0

我试图在数组中保存快照属性,但由于某种原因,当我将数据存储在查询中时(例如使用onchild_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的位置。