为 parse.com 后台作业实施超过一天的重复间隔
Implement repeat interval of more than a day for parse.com background job
我创建了这样的后台作业:
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 没有选项可以设置超过一天的时间间隔。
我想我需要使用时间戳并将该值与当前时间进行比较。有人可以告诉我执行此操作的标准方法吗?
你是对的,作业调度 UI 被限制在一天内。解决问题的方法是让作业每天 运行,但在 15 运行 中的 14 秒什么也不做。那些无所事事的 运行 会很浪费,但从微观上看是这样,无论如何,解析正在支付账单。
解决方案的细节取决于具体要求。如果您需要最大程度的控制,例如精确到毫秒的 15 天,从特定于毫秒的时间开始,您需要在数据库中创建一些划痕 space,其中状态(特别是日期)来自先前的运行 被保留。
但是这个工作看起来像是一个清理任务,"very nearly 15 days, beginning within 15 days" 的要求就足够了。有了这个更简单的要求,您的直觉是正确的,简单的日期算法就可以工作。
另外,重要的是,在我看来你的意图是找到几个需要删除的对象,然后删除它们。发布的逻辑并不能完全做到这一点。我已经修复了逻辑错误并清理了 promise 处理...
// 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
我创建了这样的后台作业:
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 没有选项可以设置超过一天的时间间隔。
我想我需要使用时间戳并将该值与当前时间进行比较。有人可以告诉我执行此操作的标准方法吗?
你是对的,作业调度 UI 被限制在一天内。解决问题的方法是让作业每天 运行,但在 15 运行 中的 14 秒什么也不做。那些无所事事的 运行 会很浪费,但从微观上看是这样,无论如何,解析正在支付账单。
解决方案的细节取决于具体要求。如果您需要最大程度的控制,例如精确到毫秒的 15 天,从特定于毫秒的时间开始,您需要在数据库中创建一些划痕 space,其中状态(特别是日期)来自先前的运行 被保留。
但是这个工作看起来像是一个清理任务,"very nearly 15 days, beginning within 15 days" 的要求就足够了。有了这个更简单的要求,您的直觉是正确的,简单的日期算法就可以工作。
另外,重要的是,在我看来你的意图是找到几个需要删除的对象,然后删除它们。发布的逻辑并不能完全做到这一点。我已经修复了逻辑错误并清理了 promise 处理...
// 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