接口轮询调用问题

前端周期性逻辑脚本,应谨慎使用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);

}

})

你可能感兴趣的:(前端开发,javascript)