gpt4 book ai didi

node.js - 为什么删除文档后 docChange 会被调用两次?

转载 作者:太空宇宙 更新时间:2023-11-03 23:56:28 25 4
gpt4 key购买 nike

我正在 firestore 中收藏。我正在监听 Node 后端的更改。现在,当我收到更改时,我会处理数据并删除与更改关联的 Firestore 文档。当我调用删除时,我再次在监听器中得到相同的更改,并最终再次处理数据。

我在互联网上搜索,找不到任何解决该问题的方法。

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() 并再次创建数据库条目。

最佳答案

每次查询结果集发生变化时,Cloud Firestore 中查询的监听器都会触发。因此,如果您删除从查询中获取的文档,您的监听器将再次触发以反射(reflect)该更改。这是正常行为,没有办法解决。如果您不想处理结果集中的删除,则必须在监听器中检查文档更改的类型, as described in the documentation 。您的 docChange 有一个类型参数,指示更改中与之前快照的不同之处。

关于node.js - 为什么删除文档后 docChange 会被调用两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56888138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com