更改日期调用一次功能

2024-05-26

我有一个非常简单的问题,我似乎无法弄清楚。我使用 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();
                }
            })
        },

您可以存储一个lastUpdatedfirebase 中的字段。在客户端负载上,获取以下值lastUpdated并将其与当前日期进行比较。如果不同,请运行您的Fed.newDay方法并更新lastUpdated date.

EDIT:

正如 TheSharpieOne 在评论中指出的那样,您需要运行某种计时器函数,以确保在客户端已在午夜钟声敲响时登录时获得适当的行为。这会让你面临潜在的竞争条件,这可能会导致Fed.newDay如果当时有多个用户登录,则被多次调用。如果没有适当管理状态的适当服务器,这些类型的问题几乎不可能解决。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改日期调用一次功能 的相关文章

随机推荐