我创建了一个这样的后台工作:
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上没有选项可以将时间间隔设置为超过一天。
我想我需要使用时间戳并将该值与当前时间进行比较。有人可以告诉我标准的方法吗?
答案 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