连续提交导致重复订单
先理解原理和示例,再练习完整口述与追问。
回答要点
前端状态锁;服务端幂等;超时结果不确定。
原理拆解
重复提交既可能来自双击,也可能来自网络超时后用户重试。禁用按钮和前端 pending 只能减少同一界面并发,真正的一次性业务效果需要服务端幂等键、唯一约束和事务。客户端不确定结果时,应查询已有操作状态,而不是生成新业务编号再提交。
示例与推演
提交开始设置 pending 并携带稳定幂等键;超时后保持“结果待确认”,查询该键对应订单。服务端已完成就展示原订单,未完成再按协议重试同一键。测试双击、刷新、多个标签页以及响应丢失,确认最终只创建一笔订单。
易错点
幂等键范围、有效期、参数一致性和并发冲突要由后端约定。前端隐藏按钮不能保证一次执行。
参考回答可直接练习口述
按钮进入 submitting 时禁用,事件入口再次校验提交状态,避免重复触发。但前端挡不住多标签页、网络重试和恶意调用,最终由服务端用业务唯一约束或幂等键保证同一操作只执行一次。请求超时不一定代表未创建,重试应复用同一幂等标识或先查结果。只有用户真正发起新操作才生成新标识,失败后给出明确状态。