Получите один документ из Firestore и верните его переменной - PullRequest
0 голосов
/ 07 августа 2020

У меня меньше опыта работы с NodeJS, но я пытаюсь получить один пользовательский документ из Firestore.

const fs = firebase.firestore();
const usersRef = fs.collection('users');


let findUserByContact = (contact) => {
    let res = usersRef.where('contact', '==', contact).get().then(querySnapshot => {
        if (!querySnapshot.empty) {
            return querySnapshot.docs[0].data();
        } else {
            return false;
        }
    });
};

Я пытаюсь вернуть первый найденный документ. Однако это всегда будет возвращать undefined, когда я вызываю findUserByContact.

Я мог бы использовать console.log, чтобы увидеть результат моего запроса. Но мне не удается присвоить его переменной.

Я прочитал в Promises и увидел, что он должен что-то решить. Я пытался вызвать resolve с данными, которые хотел вернуть, но это тоже дало мне ошибку.

Ответы [ 2 ]

2 голосов
/ 07 августа 2020

Я бы порекомендовал вам использовать синтаксис async / await

let findUserByContact = async (contact) => {
    let querySnapshot = await usersRef.where('contact', '==', contact).get();
    if (querySnapshot.empty) return false;

    return querySnapshot.docs[0].data();
};
1 голос
/ 07 августа 2020

Вам нужно вернуть цепочку обещаний , как показано ниже:

let findUserByContact = (contact) => {
    return usersRef.where('contact', '==', contact).get()
     .then(querySnapshot => {
        if (!querySnapshot.empty) {
            return querySnapshot.docs[0].data();
        } else {
            return false;
        }
    });
};

Обратите внимание, что ответ @AkashDathan также полностью действителен, и использование async / await упрощает чтение.

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