js定时每天某个时间 ,执行异步方法

思路:

假设需求是每天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点

见:https://segmentfault.com/q/1010000015446312?_ea=3942824

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页