У меня есть очень простая проблема, которую я не могу понять. Я использую 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 следующим образом: harrison -> date -> date: 23
Мое предположение было то, что каждый раз, когда дата была обновлена на сервере, то функция будет работать на основе метода ref.on('child_changed')...
Firebase в. Когда I .set
значение вручную, функция работает как ожидалось, но не будет работать в одночасье при автоматическом изменении дня.
Я также пробовал использовать setInterval
и 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();
}
})
},
Вы хотите получить полночное местное время пользователя или полночь GMT? – TheSharpieOne
Полуночное местное время пользователя, GMT-6, КНТ. – Himmel
Вы говорите, что 'setInterval' не является опцией, потому что они не будут работать, когда приложение не будет запущено. Это будет проблемой для любого решения, выполняемого на клиенте. – bmceldowney