从firebase函数返回

时间:2018-10-18 15:13:19

标签: javascript firebase react-native google-cloud-functions

我的功能:

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",
}

我不知道为什么我的结果是错误的,我的返回应该发送用户对象。

2 个答案:

答案 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);
})