为parse.com后台作业实施一天以上的重复间隔

时间:2016-01-05 20:11:02

标签: parse-platform scheduled-tasks

我创建了一个这样的后台工作:

Parse.Cloud.job("ResetLeaderboard",
    function(request, response)
    {
        Parse.Cloud.useMasterKey();

        var query = new Parse.Query("Leaderboard");

        query.find(
            {
                success: function(results)
                {
                    response.success("Success!");
                },

                error: function(error)
                {
                    response.error(error);
                }
            })
            .then(
                function(results)
                {
                    return Parse.Object.destroyAll(results);
                });
    });

我想每15天运行一次这个工作。但是,www.parse.com上没有选项可以将时间间隔设置为超过一天。

我想我需要使用时间戳并将该值与当前时间进行比较。有人可以告诉我标准的方法吗?

1 个答案:

答案 0 :(得分:2)

你的工作安排用户界限被限制在一天之内是正确的。解决问题的方法是让工作每天运行,但是在15次运行中的14次中不执行任何操作。那些无所事事的运行将是浪费,但在微观上这样,并且解析正在支付账单。

解决方案的细节取决于具体要求。如果您需要最大控制,例如从毫秒到毫秒,从毫秒特定时间开始,您需要在数据库中创建一些临时空间,其中保留了先前运行的状态(特别是日期)。

但这项工作看起来像是一项清理任务,其中“非常接近15天,从15天开始”的要求就足够了。有了这个更简单的要求,你的直觉是正确的,简单的日期算法将起作用。

另外,重要的是,我认为你的目的是找到需要删除的几个对象,然后删除它们。发布的逻辑不是那么做的。我修复了逻辑错误并清理了承诺处理......

// Schedule this to run daily using the web UI
Parse.Cloud.job("ResetLeaderboard", function(request, response) {
    if (dayOfYear() % 15 === 0) {
        var query = new Parse.Query("Leaderboard");
        query.find().then(function(results) {
            Parse.Cloud.useMasterKey();
            return Parse.Object.destroyAll(results);
        }).then(function() {
            response.success("Success!");
        }, function(error) {
            response.error(error);
        });
    } else {
        response.success("Successfully did nothing");
    }   
});

function dayOfYear() {
    var now = new Date();
    var start = new Date(now.getFullYear(), 0, 0);
    var diff = now - start;
    var oneDay = 1000 * 60 * 60 * 24;
    return Math.floor(diff / oneDay);
}

dayOfYear功能归功于Alex Turpin,here