Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase Javascript,如何使用ref函数内部的变量?_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

Firebase Javascript,如何使用ref函数内部的变量?

Firebase Javascript,如何使用ref函数内部的变量?,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我正在尝试从datasnapshot中访问变量: getEmail() { var test = firebase.database().ref('/users/' + user).once('value') .then(function(snapshot) { var email = snapshot.val().email; }); console.log(email); } 该console.log不会返回数据库

我正在尝试从datasnapshot中访问变量:

  getEmail() {
    var test = firebase.database().ref('/users/' + user).once('value')
    .then(function(snapshot) {
        var email = snapshot.val().email;
        });
        console.log(email);
    }

该console.log不会返回数据库值,我也无法访问代码中其他地方的电子邮件变量。

有两种可能的解决方案:(Sterling在评论中提到了这两种方法)

1) 日志语句不在
的范围内。然后
方法:

getEmail(){
var test=firebase.database().ref('/users/'+user).once('value'))
.then(功能(快照){
var email=snapshot.val().email
控制台日志(电子邮件)
})
}
getEmail(){
var email=firebase.database().ref('/users/'+user).once('value'))
.then(功能(快照){
返回snapshot.val().email
})
控制台日志(电子邮件)

}
将日志语句上移到已解决承诺的范围内<代码>电子邮件
仅在该范围内定义,因此只能在该范围内访问。可能存在重复项,那么我如何才能访问该范围外的电子邮件值?我还可以使用另一个firebase函数吗?您不能(以任何合理的方式)在
then
回调之外访问该值。换句话说,依赖于该值的所有内容都必须从
然后
回调中处理。原因是该值是异步获取的,对于同步执行的外部作用域,要访问该值需要Javascript具有时间旅行的能力。console.log返回以下对象:Promise{{u 45:0,_81:0,_65:null,_54:null}。在_65键下是存储我想要的数据的位置。密钥出现这种情况是有原因的吗?请尝试日志语句中的JSON.stringify(email)另外我猜您正在尝试访问email密钥的值,我认为它应该是这样的
return snapshot.child('email').val()
,它将
email
设置为一个承诺,将在以后解决,无法从响应中获取实际值