【问题标题】:Get one document from Firestore and return it to a variable从 Firestore 获取一个文档并将其返回给一个变量
【发布时间】:2020-08-07 13:33:41
【问题描述】:

我对 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,但这也给了我一个错误。

【问题讨论】:

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


    【解决方案1】:

    我建议你使用 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】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-01
        • 1970-01-01
        • 2018-08-10
        • 2021-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多