是尝试捕捉好控制我的应用程序的流量



每次向集合中添加其他文档时,我都要更新firestore文档中的ID数组。

如果文档还不存在(为了创建集合(,请使用我要添加的ID创建文档,作为该数组的第一个值。

所以我想每次都尝试更新文档,并发现一个可能的错误,即">未找到某些请求的文档";并且在这种情况下创建文档

正如你在这里看到的

void addDocument(Map<String, dynamic> docData, String docId) {
final db = FirebaseFirestore.instance;
db.collection(docId.trim().toLowerCase()).add(docData).then((value) {
try {
db.collection(docId).doc("doclist").update({
"list": FieldValue.arrayUnion([docData["id"]]),
});
} catch (_) {
Map<String, List<String>> listdata = {
"list": [docData["id"]],
};
db.collection(docId).doc("doclist").set(data);
}
});
}

所以我想知道这是否是一个";"干净";做这件事的方式,是尝试/捕捉,就是这样使用的。

或者我应该用doc.exists getter检查文档是否存在?由于这个动作将经常使用,它将使的请求数量增加一倍

try catch应用于处理异常,这些异常通常不是正常流控制的一部分。

例如,在这种情况下,您可以使用set及其合并选项来创建或更新文档:

db.collection(docId).doc("doclist").set({
"list": FieldValue.arrayUnion([docData["id"]]),
}, SetOptions(merge: true));

如果数组中还不存在单个项,则这将创建具有该项的文档,或者以其他方式将该项添加到预先存在的文档的数组中。有关此方面的更多信息,请参阅文档中关于设置文档的第二个示例。

最新更新