0

语境

我正在使用 React 学习 FaunaDB,并使用本文作为参考编写了一些代码。我正在构建的演示应用程序是一个咖啡投票/计数器应用程序 - 将向用户显示咖啡类型,然后单击按钮来增加计数器。目前,只有两个按钮/咖啡选项。

问题

对于单个用户,该应用程序运行良好,但是当我打开该应用程序的两个窗口时,它似乎无法正常运行。下面列出:

窗口 1

页面加载来自 Fauna 的值(假设 mocha=1,long black=1)。我点击 mocha,应用程序应该从 Fauna 获取最新值(以防其他人进行任何更新),然后增加 mocha 并将更新发布到 Fauna(现在 mocha=2,long black=1)。我已经确认这些值存储在 FaunaDB 中。

窗口 2

页面已加载来自 Fauna 的值(假设 mocha=1,long black=1) - 同时加载了窗口 1 和 2。现在,在 Window 2 中,我单击黑色长按钮。但是,当应用程序获取值时,它会得到 mocha=1,long black=1。然后它增加 long black 并将更新发布到 Fauna(现在,mocha=1,long black=2),因此重置用户在窗口 1 中所做的选择。它应该得到 mocha=2 而不是 mocha=1。

我已经坐在这个问题上太久了,真的很感激一些方向。

代码片段

来自 API 的片段:https
: //gist.github.com/ClydeDz/76030075aebbd4673a45bdac13de7979 来自服务的片段:https
: //gist.github.com/ClydeDz/eac99e33aa2c2d8da58b26f00e6478e0 来自组件的片段: https ://gist.github.com /ClydeDz/bbc26605b039892c62245f02a7b7a631

有没有可能getAllChoices's.then实际上并没有查询 Fauna 而只是返回 React 的状态?我如何确认和解决这个问题?

4

1 回答 1

0

您没有得到正确的结果,因为您没有以事务方式进行查询,例如,以您的getAllChoices函数为例,首先您正在分页,然后将该结果返回给 javascript,然后您将结果映射到 get 操作,然后您正在提交第二个查询。您的updateChoice功能正在做同样的事情,您getAllChoicesupdateChoice在一个单独的事务中,很可能在您获取之后和更新之前,其他人已经更新了它

于 2020-04-12T14:19:10.323 回答