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

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值