Запрос Firestore не возвращает правильное значение для асинхронного ожидания? - PullRequest
0 голосов
/ 29 октября 2019

Итак, ниже пара коротких функций. createFeedPadFromScratch - моя основная функция, которая является асинхронной, и теоретически она должна дождаться разрешения вызова функции getCurrentId, прежде чем она утешит переменную currentId. Функция getCurrentId - это простой запрос к базе данных firestore, который возвращает число. Внутри функции getCurrentId корректное значение утешается, и я возвращаю это самое значение сразу после его утешения, но в основной функции, когда я утешаю это возвращаемое значение, я получаю неопределенное значение?

async function createFeedPadFromScratch() {
    let currentId = await getCurrentId();
    console.log(currentId);
}

function getCurrentId() {
    let currentIdRef = db.collection('feedPads').doc('getId');
    var currentId;

    currentIdRef.get().then(function(doc) {
        if (doc.exists) {
            currentId = doc.data().currentId;
            console.log(currentId, typeof currentId);
            return new Promise(resolve => {
                resolve(currentId);
            });
        } else {
            // doc.data() will be undefined in this case
            console.log("No such document!");
        }
      }).catch(function(error) {
          console.log("Error getting document:", error);
    });
}

1 Ответ

0 голосов
/ 29 октября 2019

Я немного сбит с толку, почему вы не используете async / await в обеих функциях. Вы можете устранить много кода, эффективно и равномерно работая с синтаксисом.

async function createFeedPadFromScratch() {
    try {
        let currentId = await getCurrentId();
        console.log(currentId);
    catch (error) {
       console.log("Error getting user id:", error);
    }
}

async function getCurrentId() {
    let currentIdRef = db.collection('feedPads').doc('getId');
    var currentId;

    const doc = await currentIdRef.get()
    if (doc.exists) {
        currentId = doc.data().currentId;
        console.log(currentId, typeof currentId);
        return currentId;
    } else {
        // doc.data() will be undefined in this case
        console.log("No such document!");
        return null;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...