如何使用Firebase和JavaScript在阵列中保存快照?

如何使用Firebase和JavaScript在阵列中保存快照?,javascript,arrays,firebase,firebase-realtime-database,Javascript,Arrays,Firebase,Firebase Realtime Database,我曾尝试将快照属性保存在数组中,但由于某种原因,当我将数据存储在查询中时,例如使用on或添加的child\u并使用foreach运行数据,数据将显示在循环和查询中,但在此情况下,其值未定义,我尝试了对象,但只救出了最后一个值,如何解决这个问题 下面是一段代码片段: var array=[]; var ref= firebase.database().ref().child('messages'); ref.orderByChild("fecha").on('value',function(sna

我曾尝试将快照属性保存在数组中,但由于某种原因,当我将数据存储在查询中时,例如使用
on
添加的child\u
并使用
foreach
运行数据,数据将显示在循环和查询中,但在此情况下,其值未定义,我尝试了对象,但只救出了最后一个值,如何解决这个问题

下面是一段代码片段:

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

底部的
console.log
在循环中的前面运行。这称为异步代码

在从API返回值之前,无法访问这些值。
.on
函数等待数据准备就绪,然后运行,这就是数据可用的原因


没有办法在回调外部“保存”数据-您知道它是什么的唯一位置将在回调内部。当然,您可以从回调内部将其传递给另一个函数,但无法将其提取到第二个console.log的位置

底部的
console.log
在循环中的前面运行。这称为异步代码

在从API返回值之前,无法访问这些值。
.on
函数等待数据准备就绪,然后运行,这就是数据可用的原因


没有办法在回调外部“保存”数据-您知道它是什么的唯一位置将在回调内部。当然,您可以从回调内部将其传递给另一个函数,但无法将其提取到第二个console.log的位置

上的
是异步的,它的回调在最后一次
控制台之后才会触发。记录
调用您的代码段。上的
可能重复的
是异步的,它的回调在最后一次
控制台之后才会触发。记录
调用您的代码段。可能重复的