setInterval 和 setTimeout 什么区别

  1. setInterval

setInterval 会固定间隔重复执行。

setInterval(() => {

console.log('每 3 秒执行一次')

}, 3000)

第 3 秒执行一次

第 6 秒执行一次

第 9 秒执行一次

第 12 秒执行一次

它的意思是:不管上一次请求有没有完成,每 3 秒都触发一次。

如果网络慢一点,可能出现这种情况:

第 0 秒:发起第 1 次查询

第 3 秒:第 1 次还没返回,又发起第 2 次查询

第 6 秒:第 2 次还没返回,又发起第 3 次查询

  1. setTimeout

setTimeout 是延迟执行一次

setTimeout(() => {

console.log('3 秒后执行一次')

}, 3000)

先查一次支付状态

等这次请求结束

再等 3 秒

再查下一次

setTimeout 不会天然阻止重复请求;但用"请求完成后再 setTimeout 安排下一次"的写法,就可以保证上一次没完成时不会执行第二次请求。