从数据库中读取数据,然后对其进行更新。它看起来像:
DATA (state 0) <---
UPDATED DATA (state 1) --->
执行两个异步调用时:
DATA (state 0) <---
DATA (state 0) <---
UPDATED DATA (state 1) --->
UPDATED DATA (state 1') ---> ERROR
它返回一个错误,因为数据的状态已更改。这就是交易的工作原理。
为了避免访问冲突,可以实现自定义队列系统。或者捕获错误并以最大尝试次数的setTimeout重新运行事务。
排队系统
:
DATA (state 0) <---
UPDATED DATA (state 1) --->
DATA (state 1) <---
UPDATED DATA (state 2) --->
重新运行系统
DATA (state 0) <---
DATA (state 0) <---
UPDATED DATA (state 1) --->
UPDATED DATA (state 1') ---> ERROR
DATA (state 1) <---
UPDATED DATA (state 2) --->