我在消防站里有个收藏品。我正在侦听节点后端的更改。现在,当我收到更改时,便会处理数据并删除与更改关联的Firestore文档。当我调用delete时,我再次在侦听器中获得了相同的更改,并且最终再次处理了数据。
我在互联网上搜索,找不到解决该问题的方法。
let doc_form_reponse = db.collection(CONSTANTS.FIREBASE.COLLECTIONS.SUBMISSIONS);
let qref1 = doc_form_reponse.where('context', '==', 'someContext').where('processed', '==', false);
let observer_form_response = qref1.onSnapshot(docSnapshot => {
docSnapshot.docChanges().forEach(docChange => {
let doc = docChange.doc;
// save data to Mongo Db
var survey = Surveyresponse({
resp: docChange.doc.data().response,
metadata: JSON.stringify(docChange.doc.data().metadata)
});
survey.save(function (err, resp) {
if (err) return console.error(err)
else {
console.log(doc.id," deleted from firebase");
doc.ref.delete();
}
})
})
// ...
}, err => {
console.log(`Encountered error: ${err}`);
});
在调用doc.ref.delete()之后,一旦收到更改并再次获得数据库条目。
答案 0 :(得分:1)
每次在查询结果集更改时,都会触发Cloud Firestore中查询的侦听器。因此,如果删除从查询中获得的文档,则监听器将再次触发以反映该更改。这是正常行为,无法解决。如果您不想处理结果集中的删除操作,则必须在侦听器as described in the documentation中检查文档更改的类型。您的docChange
具有类型参数,该参数指示更改与以前的快照有何不同。