Firebase Javascript,如何使用ref函数内部的变量?
我正在尝试从datasnapshot中访问变量: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不会返回数据库
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
设置为一个承诺,将在以后解决,无法从响应中获取实际值