Выполнять определенную функцию каждый раз, когда дата изменяется по местному времени пользователя - PullRequest
0 голосов
/ 23 января 2020

Я сохраняю номер счетчика в хранилище пользователя. Я хочу предоставить пользователю некоторый контент, который ежедневно меняется с помощью этого счетчика. Таким образом, каждый раз, когда счетчик увеличивается на 1, содержимое будет меняться. Проблема в разнице часовых поясов. Есть ли возможность запускать функцию, которая ежедневно увеличивает этот счетчик на 1. Я мог бы использовать setInterval (), который является частью библиотеки NodeJs, но это не будет точным «ежедневным» обновлением для всех пользователей.

1 Ответ

1 голос
/ 23 января 2020

Пользовательское хранилище доступно вам как разработчику, только когда действие активно. Эти данные недоступны после закрытия действия, поэтому вы не сможете асинхронно обновлять поле. Если вам нужен асинхронный доступ, я бы предложил использовать внешнюю базу данных и хранить только строку базы данных ключ в пользовательском userStorage. Таким образом, вы можете получить доступ к данным и изменять их в любое время.

Метод setInterval будет периодически запускать функцию, но может работать не так, как вы хотите. Он только запускает функцию, пока активна среда выполнения. Многие сервисы завершат работу через некоторое время. Облачные функции, например, иногда запускаются, но затем отключаются, когда не используются. Кроме того, облачные функции можно запускать несколько раз в параллельных экземплярах, выполняя функцию setInterval несколько раз параллельно. Это увеличит счетчик больше, чем вы хотите.

Использование выделенного сервиса Cron поможет сократить количество одновременных выполнений, а также обеспечит его запуск при желании.

Вы не можете напрямую получить доступ к часовому поясу пользователя в действии, то есть вы не сможете определить конец дня . Вы можете изменять контент каждый день, но у него будет какое-то смещение. Чтобы обойти это, у вас может быть несколько заданий cron, которые выполняются для разных сегментов пользователей.

Используя поле conv.user.locale, вы можете получить их язык. en-US обычно предназначен для американских пользователей, которые обычно живут в США. Хотя это может привести к странному поведению при путешествии, вы можете включить пользователей в определенный период выполнения. Выполняя задачу в одночасье, либо в 1:00, либо в 4:00 они, вероятно, не будут знать, но знают, что она обновляется в одночасье.

Вы можете использовать помощник определения местоположения , чтобы получить более точное местоположение пользователя. Это может быть немного ненужно, но вы можете использовать это значение, чтобы определить его часовой пояс, а затем получить «полночь» этого пользователя, чтобы вставить правильную корзину Cron.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...