javascript 尝试写入firestore时“RestConnection Commit failed with error”

uqdfh47h  于 2023-05-21  发布在  Java
关注(0)|答案(3)|浏览(158)

当我尝试写入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个交易。有没有可能这个错误是因为这个?

von4xj4u

von4xj4u1#

以下是您可以检查的几个要点:
1.在Cloud Firestore中,您每秒只能更新一次单个文档,这对于某些高流量应用程序来说可能太低了。看看Firestore documentation
1.您可以参考文档。
1.您也可以尝试使用Postman API访问数据。
1.另一种方法是组合两个提交。

sauutmhj

sauutmhj2#

问题是我在一秒钟内向一个firestore文档发送了两个事务提交。第二次提交引发了上述错误。通过合并两次提交修复了它

ckocjqey

ckocjqey3#

在我的例子中,我在钩子中提交了一个事务,React渲染了我的组件两次。这让火炎有些吃不消。
解决方案是为React禁用严格模式:

// index.js

// good 
root.render(<App/>); ✅

// bad
root.render(
  <React.StrictMode>
    <App/>
  </React.StrictMode>
); ❌

参考资料

https://stackoverflow.com/a/65167384/17627866

相关问题