从Firestore获取一个文档并将其返回到变量

时间:2020-08-07 13:33:41

标签: javascript node.js firebase google-cloud-firestore

我对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;
        }
    });
};

我正试图返回找到的第一个文档。但是,在我致电findUserByContact时,这将始终返回undefined。

我可以使用console.log来查看查询的输出。但是我无法将其分配给变量。

我已经阅读了Promises,并且看到它必须解决某些问题。我试图用我想返回的数据调用resolve,但这给了我一个错误。

2 个答案:

答案 0 :(得分:2)

我建议您使用异步/等待语法

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

    return querySnapshot.docs[0].data();
};

答案 1 :(得分:1)

您需要返回promise chain,如下所示:

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使其更易于阅读。