SetTimeout () в течение нескольких дней - плохая практика? - PullRequest
0 голосов
/ 06 мая 2020

Итак, мое приложение Meteor позволяет пользователям зарегистрироваться для получения бесплатной 14-дневной пробной версии. Когда они регистрируются, их документ БД обновляется с пометкой «Бесплатная пробная версия: активна».

Я бы хотел, чтобы документ автоматически обновлялся до 'Free Trial: Expired' через 14 дней с даты регистрации, но мне было интересно, будет ли SetTimeout () с 14-дневной задержкой (в мс) соответствующий?

Ответы [ 2 ]

3 голосов
/ 06 мая 2020

Нет, это неправильный способ решения вашей проблемы.

Вы захотите сохранить дату истечения срока их пробной версии в их учетной записи и проверить при входе в систему, истек ли их пробная версия (т.е. сегодняшняя дата> срок годности?) с отображением сообщения, если оно есть.

2 голосов
/ 06 мая 2020

Вы хотите, чтобы поле в вашей базе данных с названием что-то вроде expiresAt устанавливало дату / время на 14 дней в будущем. Всякий раз, когда вы аутентифицируетесь, запрашивая учетную запись, вы захотите запустить logi c следующим образом:

SELECT
  # yadda yadda yadda
FROM
  accounts
WHERE
  expiresAt > NOW()

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

...