Tengo menos experiencia con NodeJS, pero estoy tratando de obtener un documento de usuario de 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;
        }
    });
};

Estoy intentando devolver el primer documento que se encuentra. Sin embargo, eso siempre devuelve indefinido cuando llamo a findUserByContact.

Podría usar console.log para ver el resultado de mi consulta. Pero no consigo asignarlo a una variable.

Leí Promises y vi que tenía que resolver algo. Estaba tratando de llamar a resolve con los datos que quería devolver, pero eso también me dio un error.

0
Esmay Moo 7 ago. 2020 a las 16:33

2 respuestas

La mejor respuesta

Debe devolver la cadena de promesas, como sigue:

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

Tenga en cuenta que la respuesta de @AkashDathan también es totalmente válida y el uso de async / await hace que sea más fácil de leer.

1
Renaud Tarnec 7 ago. 2020 a las 13:45

Le recomendaría que use la sintaxis async / await

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

    return querySnapshot.docs[0].data();
};
2
Akash Dathan 7 ago. 2020 a las 13:40