更改日期时调用函数一次
Call function once on day change
我有一个非常简单的问题,我似乎无法解决。我使用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
我的假设是,每次在服务器上更新日期时,函数都会基于Firebase的ref.on('child_changed')...
方法运行。当我手动.set
该值时,该函数会按预期运行,但不会在自动换天的情况下运行一夜。
我还尝试过使用setInterval
和setTimeout
每86400000毫秒(1天)运行一次函数。不过,我认为这些不会在应用程序未运行时运行。
一定有什么东西我在这里俯瞰。谢谢你的时间和帮助。
更新:
只是澄清一下。
这就是我要做的:
我有两个复选框,用来标记需要由一群人(即用户)完成的任务的完成情况。这两项任务只需要由任何一个用户每天完成一次。当天结束后,我想清除它们的值(将它们设置为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();
}
})
},
您可以在firebase中存储一个lastUpdated
字段。在客户端加载时,获取lastUpdated
的值并将其与当前日期进行比较。如果不同,请运行Fed.newDay
方法并更新lastUpdated
日期。
编辑:
正如TheSharpieOne在评论中指出的那样,如果客户端已经在午夜登录,你会希望运行某种计时器功能,以确保你得到适当的行为。这会使您面临潜在的竞争条件,如果当时有多个用户登录,可能会导致Fed.newDay
被多次调用。如果没有适当管理状态的适当服务器,几乎不可能解决这些问题。
- 使用每500ms运行一次的jquery函数是个好主意吗
- Javascript函数,需要每隔30秒递减一次
- 当元素可见时,jQuery滚动函数会触发一次
- 使函数只运行一次(Javascript)
- 如何在Javascript中设置函数在上一次结束时启动
- 运行“;非“;单击另一个函数中的函数仅一次
- 角函数每秒钟增加一次
- JavaScript只有在最后一次被调用时才运行函数
- 如何只使用一次window.onload函数
- 如何每 10 秒调用一次 JS 函数,然后以角度激活一个函数
- 节点 js 在启动时调用函数一次
- 有人可以帮助我调试带有addClass和removeClass函数的“每个会话一次”cookie吗?
- 如何在 window.setInterval 中每分钟运行一次 getJSON 函数
- 一次将多个对象传递给函数参数
- 就绪函数上的指令只能执行一次
- 一段时间后调用函数,但只调用一次
- 如何加载一个html页面并在其中只需单击一次即可运行函数
- Javascript只使用setInterval()调用一个子函数一次
- 元素在JavaScript函数中只更改过一次
- 函数只更改一次内容