我正在尝试实现一个函数,在给定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);
});
}
答案 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 async
和await
个关键字,它们可以大大提高您的代码可读性。