Firebase - 即使未定义值,方法也会返回undefined

时间:2014-01-04 08:24:12

标签: javascript jquery firebase

我使用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。

1 个答案:

答案 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/)。