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

Javascript Firebase-方法返回undefined,即使值未定义,javascript,jquery,firebase,Javascript,Jquery,Firebase,我使用Firebase API编写了一个方法,该方法应该返回一些数字的平均值。该方法在大部分情况下有效,但在返回时失败。My alert(sum)返回正确答案,但由于某些原因,该方法返回undefined function returnAverage ( keyName ) { myDataRef.child(keyDictionary[keyName]).once( 'value', function(dataSnapshot) { tempPermArray

我使用Firebase API编写了一个方法,该方法应该返回一些数字的平均值。该方法在大部分情况下有效,但在返回时失败。My 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。但是,当我将该变量设置为该方法的结果时,它会将其值更改为未定义

.once('value')
是一个异步函数。其中的
return
语句不是用于
returnAverage
函数,而是作为第二个参数传递给
.once('value')
的内部函数。例如,尝试以下方法:

function returnAverage ( keyName )
{
  myDataRef.child(keyDictionary[keyName]).once( 'value', function(dataSnapshot) {
    ...
  }
  return 10;
}
您将看到变量将被赋值为10

基本问题是必须从服务器检索值,这需要一点时间。在检索到值后,您需要调用自己的函数,以便对其执行任何操作,或者使用“承诺”(请参阅)