Firestore runTransaction并发场景下读取文档返回值特性咨询
问题解答
你在新发起的事务中执行const isPresent = doc.data().present;读取操作时,获取到的是此前已完成提交的旧值,不会读到其他未提交事务的临时变更。
核心原理
Firestore事务采用快照隔离(Snapshot Isolation)机制:
- 每个事务启动时会拉取当前所有已提交数据的一致性快照,该事务内所有读取操作都基于这个固定快照执行
- 未提交的事务变更属于事务私有状态,不会对外可见,不会影响其他并行事务的读取结果
并发冲突处理规则
如果前一个未提交的事务先完成了对目标文档的写入,后启动的事务在提交阶段会检测到文档版本不匹配,此时Firestore会自动重试整个事务逻辑,重试阶段事务会拉取包含前序事务提交结果的最新快照,才能读到更新后的值。
额外代码提示
你提供的示例事务中更新的是population字段,初始化文档中未定义该字段,实际运行不会报错,会自动新增该字段,但如果是要修改present字段需要注意修正字段名。
内容的提问来源于stack exchange,提问作者KK2491
相关产品推荐
相关产品推荐

