我在“收据”集合中创建文档时触发了 Firebase 函数。该函数使用 FieldValue.increment 更新“projects”集合中相关文档中的totalReceipts 字段。
相关代码如下:
const newReceipt = parseInt(data.amount);
await projectDocRef.update({
totalReceipts: admin.firestore.FieldValue.increment(newReceipt),
updatedUserId: data.userId,
});
问题: 在一个实例中,totalReceipts 字段未针对文档创建进行更新,但函数中未记录任何错误。同一项目的另外两个更新工作正常。
问题: 使用 FieldValue.increment 的 Firebase 函数是否有可能无法更新totalReceipts而不记录错误?如果是这样,潜在的原因可能是什么?
我检查了 Firebase 函数代码,以确保它正确处理收据文档的创建并更新相应项目文档中的totalReceipts 字段。我检查了Firebase功能日志,但没有发现任何错误,这让我相信更新应该已经成功了。
我预计 Firestore 文档中的totalReceipts 字段会按新创建的收据中指定的金额递增。然而,在一种情况下,即使没有记录错误,该字段也没有更新。对于与同一项目相关的其他收据,该函数可以正常工作,因此我不确定为什么在这种特殊情况下它会失败,并且没有任何错误消息。
收据收集
我的疑问是,totalReceipts: admin.firestore.FieldValue.increment(newReceipt) 是否有可能因竞争条件或任何其他原因而失败。
不,不会因为竞争条件而失败。 增量应该在所有情况下始终发生,除非出现某些特殊情况,例如违反安全规则或其他权限错误,甚至可能是整数溢出。 如果出现故障,如果编写正确,您的错误处理代码将拾取该故障。 在任何情况下,Firestore 都不会默默失败。