делать c .data (); из firebase возвращает undefined, но печатает нормально? - PullRequest
0 голосов
/ 17 марта 2020

Так что мне нужно получить данные с заданным идентификатором из коллекции Firebase. Моя функция затем должна вернуть его (документ) и в моем тесте она должна распечатать (как «результат»). По какой-то причине мой тест печатает «undefined», но моя функция (getIteration (id)) выводит именно то, что мне нужно для возврата (в console.log над return). Почему он возвращает неопределенное значение, но при том же самом c .data () печатает именно то, что мне нужно?

Вот мой код:

//gets the iteration with the given id
async function getIteration(id) {
    fb.db.collection('iteration').where('id', '==', id).get().then(snapshot => {
        snapshot.forEach(doc => {
            console.log(doc.data())
            return doc.data();
        })
    })
}

и мой тест:

firebase.getIteration(fbIterationID).then(function(result){
 console.log('LOGGING FB ITERATION DOCUMENT WITH THE ID OF: ' + fbIterationID)
    console.log(result)
})

Ответы [ 2 ]

0 голосов
/ 18 марта 2020
    //gets the iteration with the given id
async function getIteration(id) {
    return fb.db.collection('iteration').where('id', '==', id).get().then(snapshot => {
        return snapshot.docs.map(doc => doc.data());
    })
}
0 голосов
/ 17 марта 2020

Вам необходимо вернуть обещание от getIteration, чтобы вызывающий абонент мог использовать его результаты. Создание функции asyn c не сделает это за вас:

async function getIteration(id) {
    return fb.db...
}
...