[英]Firebase - method returns undefined even though value is not undefined
我使用Firebase API編寫了一種方法,該方法應返回一些數字的平均值。 該方法在大多數情況下都有效,但返回時失敗。 我的alert(sum)返回正確答案,但是由於某種原因該方法返回undefined。
function returnAverage ( keyName )
{
myDataRef.child(keyDictionary[keyName]).once( 'value', function(dataSnapshot)
{
tempPermArray = dataSnapshot.val();
var data = dataSnapshot.val();
var sum = 0;
for ( var entry in data['submissions'] )
{
sum += parseInt(data['submissions'][entry][0]);
}
sum /= returnSize(data['submissions']);
alert( sum );
return sum;
});
}
當我在控制台中創建一個新變量並將其設置為0時,它將返回0。但是,當我將該變量設置為等於此方法的結果時,它將其值更改為undefined。
.once('value')
是一個異步函數。 您在其中的return
語句不是針對returnAverage
函數,而是作為.once('value')
的第二個參數傳遞的內部函數。 例如,嘗試以下操作:
function returnAverage ( keyName )
{
myDataRef.child(keyDictionary[keyName]).once( 'value', function(dataSnapshot) {
...
}
return 10;
}
您會看到該變量將被賦值為10。
基本問題是必須從服務器檢索該值,這需要一些時間。 檢索值后,您需要調用自己的函數以執行所需的任何操作,或使用“ promise”(請參見http://www.promisejs.org/ )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.