我目前正在使用我正在使用Firestore的问答应用程序。
当前方案-一个人会问一个问题。这个问题与多个人匹配。但是,其中只有一个人可以提出该问题和答案。当有人提出问题时,我会将问题文档的状态从“待处理”更改为“已声明”。为了避免两个人提出相同的问题,我在交易中具有逻辑性。我仅在问题状态仍为“待定”时更新文档。
当前问题-如果两个人试图同时提出该问题,我的应用程序将崩溃并显示“错误·Firestore:操作被中止,通常是由于诸如事务中止之类的并发问题(Firestore / aborted)。” < / p>
我对错误的理解不足以解决此问题。我该如何解决这个问题?
通用问题-如何确保一次只有一个人可以更新Firestore文档?还有任何待处理的更新不会使应用程序崩溃吗?
答案 0 :(得分:0)
我怀疑以下情况。
人员A :成功提出问题,交易成功。
人员B :无法声明该问题,您的代码(事务回调)以错误结尾。它会重复执行直到达到5次限制,但是您的代码无法正确处理该操作,并且每次都会失败。超过5个限制后,将以失败的响应返回整个交易承诺。
要修复您的代码,您应该成功完成人员B 的交易(无要求),然后检查他/她是否已成功提出问题。它将执行如下:
人员A :在第一轮交易中成功提出了问题
人员B :在第一轮交易中失去竞争条件,因为第二次执行交易是因为同时发生了写入。在第二回合中,您将检测到已经提出索赔,并在没有索赔的情况下正常完成了交易。
我希望这会有所帮助。