js每日定时请求接口

需求是每日十点请求一次接口。

初始方法是写一个一分钟的轮询,定时查询系统时间,如果时间为10点就执行请求函数。但是考虑这样太浪费资源,在师傅的帮助下找到了一个更优的方法。计算当前时间和目标时间的时间间隔,如果超过,则设置定时查询的时间间隔为距离明天目标小时的距离,如果还没到就设置时间为当前时间到目标小时的距离。

更优代码:

        /*
          入参是目标时间的小时数,取值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(){
            msg()
            setTimeout(getProductFileList,24*3600 * 1000)//之后每天调用一次
        }
        setRegular(10);//比如目标是每天早上8点

原始方法:

		//获取当前时间
        function showTime(){
            var time = new Date(); // 得到当前时间

            var h = time.getHours();
            var i = time.getMinutes();
            return h+":"+i
        }
        //轮询 十点查询一次
        setInterval(function () {
            showTime();
            if (showTime() == '10:0'){
                msg()
            }
        } ,60000);

 

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值