我的功能:
export async function getDataUser() {
var usersRef = firebase.database().ref('UsersList');
var user = firebase.auth().currentUser;
let dataUser;
if (user) { //EDITED
await usersRef.child(user.uid).once('value').then((snapshot) => {
dataUser = snapshot;
})
}
console.log("dataUser")
console.log(dataUser)
return dataUser;
}
然后在另一个组件中:
console.log("result")
console.log(getDataUser())
我希望我的函数返回快照,但这是我的结果:
结果
Promise {
"_40": 0,
"_55": null,
"_65": 0,
"_72": null,
}
dataUser
Object {
"age": "55",
"email": "test@test.fr",
"sexe": "homme",
}
我不知道为什么我的结果是错误的,我的返回应该发送用户对象。
答案 0 :(得分:2)
on()
不返回承诺。它设置一个持续的侦听器,该侦听器将继续接收更新,直到您调用off()
。如果您想一次获取数据并在数据准备好后收到承诺,请改用once()
。
答案 1 :(得分:1)
我试图重现您的代码,我发现这是可行的:
返回承诺值时,可以附加一个.then()
回调,然后在该回调中检查结果。像这样:
export async function getDataUser() {
var usersRef = firebase.database().ref('UsersList');
var user = firebase.auth().currentUser;
let dataUser;
if (user) {
return await usersRef.child(user.uid).once('value').then((snapshot) => {
return dataUser = snapshot; // or return dataUser = snapshot.val();
})
}
}
显示后:
getDataUser().then((result)=>{
console.log(result);
})