接口轮询调用问题

前端周期性逻辑脚本,应谨慎使用setInterval 它会以时间轴(但是又卡不准)固定周期性地执行脚本,比如调用接口更新页面。

假设5秒周期,但是你的接口突然抽风,3秒才返回,那么再过2秒,下一个周期又到了,这与一般意义上间隔5秒刷新的诉求是违背的。

如果接口情况更糟糕,超过了5秒,那么上一次还没执行完,下一次又开始了,这在绝大多数的业务场景下是不合适的,甚至是错误的!

使用如下方式优化

(function(){

try{

//TODO: something

}finally{

setTimeout(arguments.callee,5000);

}

})

以这种形式来实现周期性逻辑,会正确地实现“间隔“的周期,并且,在异步逻辑,比如接口调用是。应该在Promise链的最后一步,发起setTimeout重新安排下一次的周期

另外,arguments.callee已经过时被弃用了,访问arguments 是个很昂贵的操作,因为它是个很大的对象,每次递归调用时都需要重新创建,会很大程度下影响浏览器的性能,这样使用的问题更大。

所以,应该这样改进

(function fn(){

try {

// TODO: something

} finally {

setTimeout(fn, 5000);

}

})

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值