Node cron отправляет почту через 10 минут

Чего я хочу добиться, так это того, что когда я ввожу почтовый маршрут, я хочу отправить электронное письмо через 10 минут. Для этого я использую node-cron. Но это расписание не отправляет почту через 10 минут. Я полагаю, что это устанавливает его, когда сама минута составляет 10, а почта отправляется? Как я могу добиться, чтобы при вводе маршрута почта отправлялась через 10 минут один раз?

        cron.schedule("10 * * * *", function(){
            const mailOptions = {
                from: '[email protected]', // sender address
                to: '[email protected]', // list of receivers
                subject: 'Test | ' + newadvertisement.manufacturer + ' ' + newadvertisement.brand, // Subject line
                html: '<p>Test
            };

            transporter.sendMail(mailOptions, function (err, info) {
                if (err)
                    console.info(err)
                else
                    console.info(info);
            });
        });

P.S. мой код работает без node-cron. Также я не получаю ошибок.

Почему бы не использовать setTimeout?

Avihay m 28.02.2019 16:23

@Avihaym Как вы думаете, это хороший метод?

zlotte 28.02.2019 16:23

Конечно... вам не нужен cron.

Avihay m 28.02.2019 16:25

Но у меня также есть шесть групп пользователей. И для каждой группы пользователей должно быть отправлено одно и то же электронное письмо. Для первой группы через 10 мин, для второй группы через 20 мин. и т. д. Шесть setTimeouts все еще надежны? @Авихайм

zlotte 28.02.2019 16:26

Вы можете установить время как переменную и изменить его в соответствии с группой.

Avihay m 28.02.2019 16:28

Как упоминалось ниже, cron — это не то, что вам нужно, если вы хотите отправить почту только один раз. Также для setTimeout(): это жизнеспособное решение, но имейте в виду, что если ваш сервер остановится или выйдет из строя по какой-либо причине во время тайм-аута, письма будут отправлены нет.

Enslev 28.02.2019 16:31

@Enslev Хорошо, я буду использовать setTimeout. Если почта однажды не будет отправлена, это не большая проблема;)

zlotte 28.02.2019 16:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
372
2

Ответы 2

Так работает крон. вики для дальнейшего чтения. TL;DR: как вы сказали, он будет отправлять почту каждый, когда время составляет 10 минут после часа, а не только один раз.

Для того, что вы хотите, вы можете сделать простой установить время ожидания () с задержкой 600000 (1000 мс * 60 секунд * 10 минут).

Или вы можете использовать повестка дня для гораздо большего контроля над тем, когда он действует. Для этого требуется какая-то база данных, но это более надежно, поскольку setTimeout() не будет работать, если сервер будет перезапущен после установленного времени ожидания.

Я считаю, что прямо сейчас он отправляет каждый час, вечность, когда минута = 10

Если вы хотите использовать cron для этого, вам нужно установить значение вместо этих звездочек:

cron.schedule("40 16 28 Feb Thu",

Однако, если это одноразовое действие, вместо этого вы можете использовать тайм-ауты.

setTimeout(sendEmail(),600000);

Другие вопросы по теме