当我尝试写入Firestore时,出现以下错误。这是在JavaScript(React)中完成的。有人能告诉我这是什么吗?我如何修复它?
@firebase/firestore: Firestore (8.3.1): RestConnection Commit failed with error: {"code":"failed-precondition","name":"FirebaseError"} url: https://firestore.googleapis.com/v1/projects/{project name}/databases/(default)/documents:commit request: {"writes":[{"update":{"name":"projects/{project name}/databases/(default)/documents/teams/T22yKl1ERQSlfuZNitrvs2vRjSJ2/team-analytics/T22yKl1ERQSlfuZNitrvs2vRjSJ2-Dec-22-2021","fields":{"homePageViews":{"integerValue":"3"},"timeModified":{"timestampValue":"2021-12-22T09:32:00.000000000Z"}}},"updateMask":{"fieldPaths":["homePageViews","timeModified"]},"currentDocument":{"updateTime":"2021-12-22T09:23:08.916511000Z"}}]}
我尝试访问Firestore的代码如下所示:
return db.runTransaction(async (transaction) => {
const analyticsDoc = await transaction.get(analyticsReference);
if (analyticsDoc.exists) {
const analytics: any = analyticsDoc.data();
return transaction.update(analyticsReference, { homePageViews: analytics.homePageViews + 1, timeModified: getCurrentDateTime() });
}
const newAnalytics: AnalyticsObject = {
totalViews: 0,
homePageViews: 1,
timeModified: getCurrentDateTime(),
};
return transaction.set(analyticsReference, newAnalytics);
});
我的控制台中也出现以下错误:
POST https://firestore.googleapis.com/v1/projects/optimx-sports/databases/(default)/documents:commit 400
编辑:经过更多的挖掘,我想这可能是因为我同时向同一个文档发送了2个交易。有没有可能这个错误是因为这个?
3条答案
按热度按时间von4xj4u1#
以下是您可以检查的几个要点:
1.在Cloud Firestore中,您每秒只能更新一次单个文档,这对于某些高流量应用程序来说可能太低了。看看Firestore documentation。
1.您可以参考文档。
1.您也可以尝试使用Postman API访问数据。
1.另一种方法是组合两个提交。
sauutmhj2#
问题是我在一秒钟内向一个firestore文档发送了两个事务提交。第二次提交引发了上述错误。通过合并两次提交修复了它
ckocjqey3#
在我的例子中,我在钩子中提交了一个事务,React渲染了我的组件两次。这让火炎有些吃不消。
解决方案是为React禁用严格模式:
参考资料
https://stackoverflow.com/a/65167384/17627866