Разрабатываю отпускную систему для персонала. Если сотрудники запрашивают отпуск в 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);
}
@ Mike'Pomax'Kamermans Пожалуйста, проверьте мой код
пожалуйста, формат ваш код. Нажмите «Изменить», скопируйте его в текстовый редактор, исправьте отступ, удалите фрагменты, которые не способствуют возникновению вашей проблемы, а затем обновите свое сообщение этим новым кодом. Прямо сейчас более половины включенных вами строк не имеют отношения к тому, о чем вы спрашиваете. Не включайте извлечение данных, которое затем попадает в переменную html, которую вы можете просто установить на "<p>html goes here</p>" и т. д. Пожалуйста, сформируйте минимальный воспроизводимый пример.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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