gpt4 book ai didi

javascript - 使用 Promise 处理 firestore 任务

转载 作者:行者123 更新时间:2023-12-01 00:32:14 25 4
gpt4 key购买 nike

我是 Firestore Promise 的新手。我必须运行这个任务:

db.collection("users").doc(user_uid).collection("grades").doc("g").collection("es111").get().then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
db.collection("users").doc(user_uid).collection("grades").doc("g").collection("es111").doc(doc.id).delete();
});
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});

这是第一个问题。该任务完成后应该会通知我。因此,只有当集合中的所有文档都被删除时。我尝试用 promise 来处理这件事。我不确定也许还有其他方法。提前致谢。

~菲利普

最佳答案

您也许可以使用Promise.all返回 Promise当全部delete()操作已完成,您可以使用 then()/catch()执行操作或处理错误。如delete返回Promise<void>我们可以将每个删除操作推送到一系列可与 Promise.all() 一起使用的 Promise 中。 :

function foo(user_uid) {
return db.collection("users").doc(user_uid).collection("grades").doc("g").collection("es111").get().then(function(querySnapshot) {
let promises = [];

querySnapshot.forEach(function(doc) {
// add each delete() promise to promises array
promises.push(db.collection("users").doc(user_uid).collection("grades").doc("g").collection("es111").doc(doc.id).delete());
// or more simply
// promises.push(doc.ref.delete());
});

return Promise.all(promises);
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
}

// ...

// usage
foo()
.then(() => console.log('Success!'))
.catch(err => console.error(err));

另一个需要考虑的选项是使用 batched writes :

db.collection("users").doc(user_uid).collection("grades").doc("g").collection("es111").get().then(function(querySnapshot) {
const batch = db.batch();

querySnapshot.forEach(function(doc) {
batch.delete(doc.ref);
});

return batch.commit();
})
.then(() => console.log('Batched delete completed!'));

看起来批量写入一次最多支持 500 个操作。请注意,您可以使用DocumentSnapshot.ref简单地删除。引用单个文档而不是重写查询。

希望有帮助!

关于javascript - 使用 Promise 处理 firestore 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58438411/

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