Javascript 从Firebase获取数据会记录正确的值,但返回“0”;“未定义”;

Javascript 从Firebase获取数据会记录正确的值,但返回“0”;“未定义”;,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我目前正在使用此功能从我的Firebase项目中获取数据: function getv(user) { var ref = firebase.database().ref('/users/'+user+'/points'); ref.once("value", function(snapshot) { console.log(snapshot.val()); }); } 但是,如果在控制台中运行此操作,则会得到“undefined”,然后是值: 如果

我目前正在使用此功能从我的Firebase项目中获取数据:

function getv(user)
{
    var ref = firebase.database().ref('/users/'+user+'/points');

    ref.once("value", function(snapshot) {
        console.log(snapshot.val());
    });
}
但是,如果在控制台中运行此操作,则会得到“undefined”,然后是值:

如果我尝试将它赋给一个变量,然后得到值

x = getv('Donut')
console.log(x)
我只是“未定义”。老实说,我完全不知道为什么会发生这种事

任何帮助是感激的,我可以提供更多的信息,如果需要的话

编辑:将
console.log(snapshot.val())
替换为
return snapshot.val()
仍返回未定义的

编辑2:我尝试将我的函数转换为in-async函数,这将它转换为承诺,但它仍然返回
未定义的

异步版本:

async function getv(user)
{
    var ref = await firebase.database().ref('/users/'+user+'/points')

    ref.once("value", async function(snapshot) {
        return await snapshot.val()
    });
}

getv
不返回任何内容,因此您得到了
undefined
。将
console.log(snapshot.val())
替换为
return snapshot.val()
仍然返回未定义的内容。不幸的是,将我的函数转换为使用
async
可能会重复。我已经用详细信息更新了我的帖子。
getv
不返回任何内容,因此您得到了
undefined
。将
console.log(snapshot.val())
替换为
return snapshot.val()
仍然返回未定义的内容。不幸的是,将我的函数转换为使用
async
可能会重复。我已经用细节更新了我的帖子。