Firebase Firestore-如何防止并发写入?

时间:2019-06-20 04:02:14

标签: firebase google-cloud-firestore

我目前正在使用我正在使用Firestore的问答应用程序。

当前方案-一个人会问一个问题。这个问题与多个人匹配。但是,其中只有一个人可以提出该问题和答案。当有人提出问题时,我会将问题文档的状态从“待处理”更改为“已声明”。为了避免两个人提出相同的问题,我在交易中具有逻辑性。我仅在问题状态仍为“待定”时更新文档。

当前问题-如果两个人试图同时提出该问题,我的应用程序将崩溃并显示“错误·Firestore:操作被中止,通常是由于诸如事务中止之类的并发问题(Firestore / aborted)。” < / p>

我对错误的理解不足以解决此问题。我该如何解决这个问题?

通用问题-如何确保一次只有一个人可以更新Firestore文档?还有任何待处理的更新不会使应用程序崩溃吗?

1 个答案:

答案 0 :(得分:0)

我怀疑以下情况。

人员A :成功提出问题,交易成功。

人员B :无法声明该问题,您的代码(事务回调)以错误结尾。它会重复执行直到达到5次限制,但是您的代码无法正确处理该操作,并且每次都会失败。超过5个限制后,将以失败的响应返回整个交易承诺。

要修复您的代码,您应该成功完成人员B 的交易(无要求),然后检查他/她是否已成功提出问题。它将执行如下:

人员A :在第一轮交易中成功提出了问题

人员B :在第一轮交易中失去竞争条件,因为第二次执行交易是因为同时发生了写入。在第二回合中,您将检测到已经提出索赔,并在没有索赔的情况下正常完成了交易。

我希望这会有所帮助。