Firestore 中断查询
Firestore break out of a query
如果相同的 post 已经被 post 编辑,我有如下代码不写入数据库。
我放了一个return
但是self.addtoDB()
还是被执行了。检查现有 post 并且如果存在则不写入数据库的正确方法是什么?
db.collection("posts")
.where("ytid", "==", self.youtubeId)
.get()
.then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
// doc.data() is never undefined for query doc snapshots
console.log(doc.id, " => ", doc.data());
alert("This gameplay has already been posted");
return;
});
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
self.addToDB();
像所有 return 承诺的函数一样,get() return 立即执行,您提供给 then
的回调将在查询完成后的某个时间调用。您的代码在那之后立即继续执行 self.addToDB()
,而无需等待结果。您应该改为在该回调中执行 all 条件处理。
.then(function(querySnapshot) {
if (querySnapshot.docs.length > 0) {
const doc = querySnapshot.docs[0];
console.log(doc.id, " => ", doc.data());
alert("This gameplay has already been posted");
}
else {
self.addToDB();
}
})
如果相同的 post 已经被 post 编辑,我有如下代码不写入数据库。
我放了一个return
但是self.addtoDB()
还是被执行了。检查现有 post 并且如果存在则不写入数据库的正确方法是什么?
db.collection("posts")
.where("ytid", "==", self.youtubeId)
.get()
.then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
// doc.data() is never undefined for query doc snapshots
console.log(doc.id, " => ", doc.data());
alert("This gameplay has already been posted");
return;
});
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
self.addToDB();
像所有 return 承诺的函数一样,get() return 立即执行,您提供给 then
的回调将在查询完成后的某个时间调用。您的代码在那之后立即继续执行 self.addToDB()
,而无需等待结果。您应该改为在该回调中执行 all 条件处理。
.then(function(querySnapshot) {
if (querySnapshot.docs.length > 0) {
const doc = querySnapshot.docs[0];
console.log(doc.id, " => ", doc.data());
alert("This gameplay has already been posted");
}
else {
self.addToDB();
}
})