возврат из функции firebase - PullRequest
0 голосов
/ 18 октября 2018

Моя функция:

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 голосов
/ 19 октября 2018

Я попытался воспроизвести ваш код, и я нашел следующее:

Когда вы возвращаете значение обещания, вы можете прикрепить обратный вызов .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);
})
0 голосов
/ 18 октября 2018

on() не возвращает обещание.Он устанавливает постоянный приемник, который продолжает получать обновления, пока вы не вызовете off().Если вы хотите получить данные один раз и получить обещание, когда они будут готовы, используйте once().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...