- setInterval
setInterval 会固定间隔重复执行。
setInterval(() => {
console.log('每 3 秒执行一次')
}, 3000)
第 3 秒执行一次
第 6 秒执行一次
第 9 秒执行一次
第 12 秒执行一次
它的意思是:不管上一次请求有没有完成,每 3 秒都触发一次。
如果网络慢一点,可能出现这种情况:
第 0 秒:发起第 1 次查询
第 3 秒:第 1 次还没返回,又发起第 2 次查询
第 6 秒:第 2 次还没返回,又发起第 3 次查询
- setTimeout
setTimeout 是延迟执行一次
setTimeout(() => {
console.log('3 秒后执行一次')
}, 3000)
先查一次支付状态
等这次请求结束
再等 3 秒
再查下一次
setTimeout 不会天然阻止重复请求;但用"请求完成后再 setTimeout 安排下一次"的写法,就可以保证上一次没完成时不会执行第二次请求。