我使用Firebase API编写了一个方法,该方法应返回某些数字的平均值。该方法大部分都有效,但在返回时失败。我的警报(总和)返回正确的答案,但该方法由于某种原因返回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。
答案 0 :(得分:0)
.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/)。