用JS实现一个定时任务管理插件

插件代码


(function (global) {

    function create() {
        var DefaultTaskConfig = {
            TaskName:"测试任务",
            Enable:true,
            run:function () {
            },
            Interval:3 * 60 * 1000,
            LastTime:new Date(0),
            Done:true //run函数是否正在被执行
        }

        var TaskList = {};

        var RunTask = function () {
            for (var n in TaskList) {
                if (TaskList[n].Enable && TaskList[n].Done) {

                    var now = new Date();
                    if ((now.getTime() - TaskList[n].LastTime.getTime()) >= TaskList[n].Interval) {
                        TaskList[n].run(TaskList[n]);
                        TaskList[n].LastTime = now;
                    }
                }
            }
        }

        var start = function () {
            RunTask();
            setInterval(start, 1000);
        };

        var addTask = function (taskConfig) {
            taskConfig = jQuery.extend({}, DefaultTaskConfig, taskConfig);
            TaskList[taskConfig.TaskName] = taskConfig;
        }

        return {start:start, addTask:addTask};
    }

    function init() {
        GfTaskManage.create = create;
    }

    if (global.GfTaskManage) {
        throw new Error("There's already a GfTaskAutoRunManage root here, please load the component only once.");
    }

    var GfTaskManage = global.GfTaskManage = {};
    init();

})(window);

调用的地方

      var SendHeartBeat = {
            TaskName:"发送心跳",
            Interval: 3 * 1000,
            run:function (args) {
                args.Done = false;

                var async = eval(Wind.compile("async", function () {
                    var userInfo = GfUserDataClient.userInfo();
                    if (userInfo.ServiceKey != "") {
                        var res = $await(GfUserDataClient.sendHeartbeat(userInfo.UserName, userInfo.ServiceKey));

                        args.Done = true;
                    }
                }));
                async().start();
            }
        }

        function $$PageReady() {
            eval(Wind.compile("async", function () {
                var taskMgnt = GfTaskManage.create();
                taskMgnt.addTask(SendHeartBeat); //添加任务
                taskMgnt.start();//开始执行
            }))().start();
        }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值