javascript - 调用 FireStore 的函数始终返回未定义

标签 javascript firebase google-cloud-firestore

我正在尝试实现一个函数,根据给定的 ID 检查我的 FireStore 数据库中是否存在文档。问题是我的 fire_PatronExists 函数总是返回 undefined

const patronsRef = db.collection("patrons");

alert(fire_PatronExists(user.uid));

function fire_PatronExists(id) {

    patronsRef.doc(id).get().then(function(doc) {
        // return doc.exists();
        if (doc){return true}else {return false}
    }).catch(function(error) {
        console.log("Error getting document:", error);
    });
}

最佳答案

您的函数返回未定义的事实是完全正常的:get()是一个异步方法,因此您放入 then 内的返回值不会在 fire_PatronExists 内执行;它会稍后执行。有一个great SO article这解释了同步执行和异步执行之间的区别。

根据您使用的 JavaScript 版本,有不同的解决方案。一个肯定有效的方法是将回调函数传递给 fire_PatronExists并将结果传递给该函数。

这看起来像这样(未经测试):

const patronsRef = db.collection("patrons");

fire_PatronExists(user.uid, function(exists) {
    alert(exists);
});

// Remember though, if you put code here, it will be executed in parallel
// with the code you put inside your callback. 

function fire_PatronExists(id, callback) {

    patronsRef.doc(id).get().then(function(doc) {

    }).catch(function(error) {
        console.log("Error getting document:", error);
    });
}

不过,使用回调可能会变得非常困惑。如果您使用的是最新版本的 JavaScript,您可能需要 read about asyncawait关键字,它们可以大大提高代码的可读性。

关于javascript - 调用 FireStore 的函数始终返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49712000/

相关文章:

javascript - 在 HighCharts 条形图中突出显示一个条形

javascript - 将参数从服务器对象传递到 JavaScript 的最佳方式

android - Firebase 未向控制台报告崩溃

java - 将每个 ID 的数据从 firebase 读取到 spinner 中

node.js - 使用云功能更新 firestore 文档

javascript - 点符号、窗口对象及其属性

javascript - 在contenteditable中,只有第一行过滤正则表达式,第二行过滤失败

android - 功能 SignInWithFacebook 在 Firebase Auth SDK for Flutter in macOS 中不存在,但在 Windows 中存在

firebase - Flutter Firestore 展开文档数据

javascript - 当我尝试切换到 firestore 并添加新的脚本标记时 firebase.auth() 不起作用