Таймер срабатывает раньше времени или вообще не срабатывает
Помогите, пожалуйста, разобраться, что нетак с таймером.
Браузер Chrome При создании записи, создаётся заметка со следующими свойствами: - номер заметки isbn - статус заметки - дата - время Вычесляется время в миллисекундах и передаётся таймеру setTimeout, по истечении времени изменяется статус заметки с Inprocess на Failed. Не могу понять, почему для некоторых дат, таймер срабатывает сразу или не срабатывает вообще. Например, если срок равен 30 августа, то таймер сработает сразу, а не 30 августа, от настоящего времени. Так же он не срабатывает если задать прошедшую дату, например 1 июля, статус заметки будет в процессе, а не failed. Здесь пример кода https://repl.it/Jt3i/4 |
Может я запутанно написал, можете уточнить у меня.
|
В примере кода без ящика не разберешься...
Лучше приведите пример кода с setTimeout. |
Terebonko,
Не вполне понятно, зачем эти навороты с датами:
var deadLineForCreate = {
"date": {
"years": years,
"months": months,
"days": days
},
"time": {
"hours": hours,
"minutes": minutes,
},
"deadlineInMilleseconds": 0
};
У обычной переменной типа Date есть все, что нужно... |
Спасибо ребята за замечания. Я решил проблему. Моя дата конвертированная в миллисекунды привышала лимит метода setTimeout, поэтому он срабатывал сразу после вызова.
|
Terebonko,
А какой смысл на клиенте запускать setTimeout на такой длительный срок? Что, пользователь откроет вашу страницу и будет сидеть и ждать конца августа? |
Конечно нет.
Пользователь создаёт заметку в которой есть дата, время и статус(в процессе или провалено). Дата и время конвертируются в миллисекунды и сохраняются в локальном хранилище браузера. Каждый раз, когда пользователь загружает приложение, от миллисекунд, хранящихся локальном хралище, вычитаются миллисекунды текущей даты и времени. Разность передаётся таймеру. |
| Часовой пояс GMT +3, время: 19:01. |