Firebase:删除文档



我有一个简单的函数,它似乎可以成功输出文档已被删除,但我仍然可以看到我的Battles上的文档列表。

我做错了什么?

exports.removeOldBattles = functions.https.onRequest((req, res) => {
var coll = db.collection("Battles");
coll.get().then(function (querySnapshot) {
querySnapshot.forEach(function (doc) {
var battleId = doc.id;
coll.doc(battleId).delete().then(function () {
console.log("Document successfully deleted!");
res.status(200).send("Document successfully deleted!");
}).catch(function (error) {
console.error("Error removing document: ", error);
res.status(500).send(error);
});
});
});
});

此代码在删除第一个文档后立即发送响应。它不是在一切完成后才发送响应。Cloud函数几乎会在函数发送响应后立即终止该函数(当您调用res.send()时(,因此它可能不会完成所有异步工作。

您应该只在所有文档被完全删除后发送响应。这意味着您必须注意每次调用delete()时返回的每个承诺。将它们全部收集到一个数组中,并使用Promise.all()等待它们全部完成,然后再发送响应。

const promises = [];
querySnapshot.forEach(function (doc) {
var battleId = doc.id;
const promise = coll.doc(battleId).delete();
promises.push(promise);
})
Promise.all(promises).then(() => {
res.status(200).send("Documents successfully deleted!");
});

相关内容

  • 没有找到相关文章

最新更新