js 执行定时任务

63 阅读1分钟

有个需求需要在18点前 执行个请求看当前人的上班状态,那简单,上代码,使用定时器处理

    // 获取当前时间
    const now = dayjs();

    // 使用dayjs 设置目标时间为当天的18点
    const targetTime = dayjs().hour(18).minute(0).second(0).millisecond(0);

    // 计算距离目标时间还需要等待的毫秒数
    const delayTimestamp = targetTime.diff(now);

    exec(delayTimestamp);

    const timer = null;
    function exec(timestamp) {
        console.log("exec");
        // 设置定时器,等待指定的毫秒数后执行请求
        timer = setTimeout(() => {
            // 执行请求任务
            ajax();

            // 获取明天的现在的时间, 轮询执行明天同时间的任务
            const tomorrowNow = dayjs(targetTime).add(1, "day");
            // 计算间隔的毫秒数
            const oneDayTimestamp = tomorrowNow.diff(targetTime);
            exec(oneDayTimestamp);
        }, timestamp);
    }

    // 发送请求,然后做一些处理
    function ajax() {
        console.log("ajax");
    }

    // Vue onbeforeMount 清除定时器 clearTimeout(timer)

完整代码如下


<!DOCTYPE html>
<html lang="en">

<head>
 <meta charset="UTF-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 <title>定时请求</title>
 <!-- 引入dayjs库 -->
 <script src="https://unpkg.com/dayjs@1.11.13/dayjs.min.js"></script>
</head>

<body></body>
<script>
 // 获取当前时间
 const now = dayjs();

 // 使用dayjs 设置目标时间为当天的18点
 const targetTime = dayjs().hour(18).minute(0).second(0).millisecond(0);

 // 计算距离目标时间还需要等待的毫秒数
 const delayTimestamp = targetTime.diff(now);

 exec(delayTimestamp);

 const timer = null;
 function exec(timestamp) {
     console.log("exec");
     // 设置定时器,等待指定的毫秒数后执行请求
     timer = setTimeout(() => {
         // 执行请求任务
         ajax();

         // 获取明天的现在的时间, 轮询执行明天同时间的任务
         const tomorrowNow = dayjs(targetTime).add(1, "day");
         // 计算间隔的毫秒数
         const oneDayTimestamp = tomorrowNow.diff(targetTime);
         exec(oneDayTimestamp);
     }, timestamp);
 }

 // 发送请求,然后做一些处理
 function ajax() {
     console.log("ajax");
 }

 // Vue onbeforeMount 清除定时器 clearTimeout(timer)
</script>

</html>