查询 FaunaDB 在多用户方案中无法获得最新结果



上下文

我正在使用React学习FaunaDB,并使用本文作为参考编写了一些代码。我正在构建的演示应用程序是一个咖啡民意调查/计数器应用程序——用户的咖啡类型会显示出来,你点击按钮可以增加计数器。目前,只有两个按钮/咖啡选项。

问题

对于单个用户来说,该应用程序运行良好,但当我打开应用程序的两个窗口时,它似乎表现不正常。概述如下:

窗口1

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

窗口2

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

我已经在这个问题上坐了太久了,希望能给我一些指导。

代码片段

API中的代码段:https://gist.github.com/ClydeDz/76030075aebbd4673a45bdac13de7979
服务中的代码段:https://gist.github.com/ClydeDz/eac99e33aa2c2d8da58b26f00e6478e0
组件中的代码段:https://gist.github.com/ClydeDz/bbc26605b039892c62245f02a7b7a631

有没有可能getAllChoices.then实际上并没有查询Fauna,只是返回React的状态?如何确认和修复此问题?

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

最新更新