Веб-приложение Firebase React - возвращает значение [Promise объекта] вместо значения, но в консоли оно отображает значение - PullRequest
0 голосов
/ 30 марта 2020

Я создаю приложение реакции, используя базу данных Firebase Firestore для создания пользователей, я хочу получить информацию, такую ​​как имя пользователя и полное имя, из коллекции users , но вместо значения возвращается [Object Обещаю], я попробовал это в консоли, и это работает хорошо. Вот мой код:

firebase
    .firestore()
    .collection("users")
    .doc(firebase.auth().currentUser.email)
    .get()
    .then(function(doc) {
        if (doc.exists) {
            return doc.data().fullName;
        }
    })
    .catch(function(error) {
        console.log("Error getting document:", error);
    })

1 Ответ

0 голосов
/ 30 марта 2020

Я предполагаю, что ваш код содержится внутри другой функции. Тогда вы не можете возвращать «синхронно» из функции после того, как вы использовали Promise. Решение должно заключаться в том, что ваша исходная функция также работает асинхронно и также возвращает обещание.

Например:

function getData() {
    return new Promise((resolve, reject) => {
        firebase
            .firestore()
            .collection("users")
            .doc(firebase.auth().currentUser.email)
            .get()
            .then(function(doc) {
                if (doc.exists) {
                    resolve(doc.data().fullName); // <== Pay attention to this line, you resolve rather than return
                }
            })
            .catch(function(error) {
                console.log("Error getting document:", error);
                reject(error);
            });
    });
}

Затем следует выполнить асинхронный вызов вашей функции, например:

getData().then((data) => {
    // Rest of your code
}).catch((error) => {
    // An error occured
});

//Rest of the code (after pulling data) is NOT here, it's inside the `then` part../
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...