调用FireStore的函数始终返回undefined

时间:2018-04-07 21:07:26

标签: javascript firebase google-cloud-firestore

我正在尝试实现一个函数,在给定id的情况下检查我的FireStore数据库中是否存在doc。问题是我的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);
    });
}

1 个答案:

答案 0 :(得分:2)

你的函数返回undefined这一事实是完全正常的: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个关键字,它们可以大大提高您的代码可读性。