我有一个非常简单的问题,我似乎无法弄清楚。我使用 AngularJS 和 Firebase 作为后端。
基本上,我有一个函数,我想每天在午夜运行一次,以便进行值重置(将某些对象属性设置为 false 等)。当我手动运行该函数时,该函数运行良好并且完全按照预期运行。
但是,我似乎无法让它在换日时自动运行。
我想每天在午夜运行一次的函数是Fed.newDay()
。它是通过注入Fed
工厂到我的Dte
工厂 - 保存更新的对象,包括星期、月份等。
目前,在我的Dte
工厂我有以下对象:
var date = new Date();
var Dte = {
currentDate: function() {
ref.update({date: date.getDate()});
ref.on('child_changed', function(snapshot) {
console.log('Dte registered new Day');
Fed.newDay();
});
return date.getDate();
},
}
这里的目标是运行Fed.newDay()
每次日期更改一次。我已将日期存储在 Firebase 中,如下所示:哈里森 -> 日期 -> 日期:23 https://i.stack.imgur.com/OYhxS.jpg
我的假设是,每次在服务器上更新日期时,该函数都会基于 Firebase 的运行ref.on('child_changed')...
方法。当我.set
手动更改值后,该函数将按预期运行,但不会在自动换日时运行过夜。
我也尝试过使用setInterval
and setTimeout
每 86400000 毫秒(1 天)运行该函数一次。不过,我认为这些在应用程序未运行时不会运行。
这里一定有什么东西是我忽略的。感谢您的时间和帮助。
Update:
只是为了澄清。
这就是我想做的:
我有两个复选框,标记需要由一组人(用户)完成的任务的完成。这两项任务只需由任何且仅一位用户每天完成一次。那天结束后,我想清除它们的值(将它们设置为 false),以便同一个人或不同的人可以选中两个框中的任何一个。
我没有运行服务器,我只使用 Firebase。 Firebase 有一个我确实可以访问的值,只要有人在那天使用该应用程序,该值当前就会更新该月的某一天。
解决方案:
感谢@bmceldowney 的帮助。
这是我得出的解决方案。另外,请参阅下面的正确答案,以避免11:59多用户登录时可能出现的问题。
var Dte = {
currentDate: function() {
dateRef.update({date: date.getDate()});
return date.getDate();
},
setLastUpdated: function(day) {
dateRef.set({lastUpdated: day});
},
compareReset: function(last) {
var current = Dte.currentDate();
if (last !== current) {
Fed.newDay();
Dte.setLastUpdated(current);
} else {
console.log('no reset needed');
}
},
load: function() {
dateRef.on('value', function(snapshot) {
if (snapshot.val() != null) {
var data = snapshot.val();
var updateValue = data['lastUpdated'];
Dte.compareReset(updateValue);
} else {
Dte.load();
}
})
},