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);

 

你可能感兴趣的:(JavaScript)