Ajax重试机制怎么设置自适应延迟和避免重复提交?
在开发订单提交功能时,遇到网络波动导致Ajax请求失败需要重试。现在用递归setTimeout实现重试,但问题来了:retryCount++后每次固定延迟2秒,遇到服务器503错误时想改成指数递增延迟却搞不定。
更麻烦的是用户可能多次点击提交按钮,导致多个重试任务同时执行。试过用标志位isRequesting控制,但页面刷新后状态又会重置。有没有更好的方案同时解决动态延迟和防重提交?
let retryCount = 0;
function submitOrder() {
return fetch('/api/order')
.catch(err => {
if (retryCount < 3) {
setTimeout(() => submitOrder(), 2000);
retryCount++;
}
});
}
按钮点击时传 event 进来,直接调 submitOrder(e),提交完记得 isPending = false,或者用按钮 disabled 控制也行。