Как сделать интервал setTime для отправки почты -js

Разрабатываю отпускную систему для персонала. Если сотрудники запрашивают отпуск в HR, когда HR не одобряет их запрос на отпуск, с этого момента каждые час отправляется письмо HR для утверждения или отклонения этого запроса на отпуск.

Вот моя проблема. Я пытался отправлять почту каждые одну минуту. Он работает. Но он постоянно отправляет почту. Это означает, что мое состояние не работает.

Мои условия ..

  • если ожидает моего запроса на отпуск до (leave status = 1), то отправлять каждые один час .

  • если мой запрос одобрен (оставить статус = 3), прекратить отправку Почта.

Вот мой код

// функция отправки почты ............

function(err, res) {
  setInterval(function(){
    if ((ctx.result.leave_status === 1)&&!(ctx.result.leave_status === 3) )
    {
       console.info('resp: ' + emailsArray.toString());
       type = res.type.description;
       name = res.name.f_name;
       LeaveDetails.app.models.Email.send({
       to: emailsArray.toString(),
       from: '[email protected]',
       subject: 'Leave Request ',
     // text: 'my text',
      html: '<h1 style = "text-align:center;"> Report leave request</h1><h3>' + name + ' have requested leave</h3><ul><li><b>type: </b>' + type + '</li><li><b>duration: </b>' + duration + '</li><li><b>Number of days: </b>' + days + '</li></ul>,
      },
 function(err, mail) {
   console.info('email sent!');
     if (err !== null) {
        log.error({
        type: 'error',
        model: 'leave-details',
        method: 'create (email send)',user_id: ctx.result.user_id,
        err: err,leaveData: ctx.result,}, 'leave request-email-failed');
         } 
    else {
      log.info({
        type: 'success',
        model: 'leave-details',
        method: 'create (email send)',
        user_id: ctx.result.user_id,
        leaveDuration: ctx.result.leave_start_time + " " + ctx.result.leave_end_time,
        err: err
      }, 'leave request-email-success');
    }
        next(err);
      });
    }//if end
   },60000);
  }

никогда не используйте setInterval для передачи данных, если у вас также не имеется весь код для отмены этого интервала при возникновении ошибки. Тем не менее, не могли бы вы взглянуть на свой пост, заметить, что код разбросан повсюду, и отредактировать его, чтобы он выглядел легко читаемым с отступом, выравниванием и т. (особенно обратите внимание, что даже если в вашем файле используются табуляции или четыре пробела, просто используйте два пробела в SO. У вас есть ограниченное пространство, чтобы показать ваш код до того, как начнут появляться полосы прокрутки. не все могут быть частью минимальный воспроизводимый пример)

Mike 'Pomax' Kamermans 21.07.2018 18:11

@ Mike'Pomax'Kamermans Пожалуйста, проверьте мой код

Gnanaseelan 21.07.2018 18:52

пожалуйста, формат ваш код. Нажмите «Изменить», скопируйте его в текстовый редактор, исправьте отступ, удалите фрагменты, которые не способствуют возникновению вашей проблемы, а затем обновите свое сообщение этим новым кодом. Прямо сейчас более половины включенных вами строк не имеют отношения к тому, о чем вы спрашиваете. Не включайте извлечение данных, которое затем попадает в переменную html, которую вы можете просто установить на "<p>html goes here</p>" и т. д. Пожалуйста, сформируйте минимальный воспроизводимый пример.

Mike 'Pomax' Kamermans 21.07.2018 20:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
102
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны clearInterval, чтобы прекратить отправку писем, лучший совет - установить интервал в качестве глобального объекта в конструкторе, а затем очистить его, когда установлен какой-либо статус, например, у вас есть статус с именем «завершено: ложь», если для завершения установлено значение «истина» ", clearInterval в componentWillUpdate или shouldComponentUpdate, если вы этого не сделаете, ваш интервал никогда не закончится, и это будет происходить, пока вы не отключите

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