思路:
假设需求是每天8点刷新。
定义一个A方法,目的是获取当前时间,制定一些策略:
当A获取到的时间小于7点时,一小时后再执行A;当大于7点小于8点时,每1分钟执行一次A,直到当前获取到时间为8点,执行getProductFileList函数;当时间大于8点时,恢复每一小时执行一次A的频率。
当然,这个策略还可以进行优化的,目的是为了尽可能减少setTimeout的次数但是又可以尽可能的在8点整执行getProductFileList。
A方法在客户打开页面时执行一次。
初次进入的时候,计算当前时间和目标时间的距离,执行一次setTimeout(func,距离时间),第二次开始,把setTimeOut的时候设置成24小时。代码
/*
入参是目标时间的小时数,取值0-23,当然可以根据需要拓展成分钟数,这里主要是提供思路所以从简
*/
function setRegular(targetHour){
var timeInterval,nowTime,nowSeconds,targetSeconds
nowTime = new Date()
// 计算当前时间的秒数
nowSeconds = nowTime.getHours() * 3600 + nowTime.getMinutes() * 60 + nowTime.getSeconds()
// 计算目标时间对应的秒数
targetSeconds = targetHour * 3600
// 判断是否已超过今日目标小时,若超过,时间间隔设置为距离明天目标小时的距离
timeInterval = targetSeconds > nowSeconds ? targetSeconds - nowSeconds: targetSeconds + 24 * 3600 - nowSeconds
setTimeout(getProductFileList,timeInterval * 1000)
}
function getProductFileList(){
$.ajax()//你自己的数据处理函数
setTimeout(getProductFileList,24*3600 * 1000)//之后每天调用一次
}
setRegular(8);//比如目标是每天早上8点