2017-01-09 69 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的位置。