Задать вопрос
@arlovski

Как написать обработчик в NodeJS, отправляющий запрос перед завершением процесса?

Привет.
Есть внешний модуль, который логгирует сообщения в массив на сервере и периодически отправляет их через http на другой сервер. Необходимо перед завершением процесса принудительно отправлять всё содержимое массива. Что-то типа:
var request = require('request');
var drainArray = function() {
  var options = {...};
  request(options, callback)
}
process.stdin.resume();
process.on('exit', drainArray);


есть ли возможность удостовериться, что запрос отправлен(ответ не важен) до того, как процесс завершён, кроме как использовать блокирующий event loop код - while() {}

знаю, что это антипаттерн, но всё же
  • Вопрос задан
  • 2524 просмотра
Подписаться 3 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
BuriK666
@BuriK666
Компьютерный псих
Ответ написан
Комментировать
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Смотря как завершается процесс, если по сигналам, то опробуйте:
//do something when app is closing
process.on('SIGINT', drainArray); // выход по Ctrl-C из консоли
process.on('SIGTERM', drainArray); // завершение через kill
process.on('exit', drainArray); // выход по собственному желанию
process.on('uncaughtException', drainArray); // если свалился

Но сделайте глобальный флаг и проверяйте его в drainArray, чтобы не запустить 2 раза:
var drainArray = function() {
  if (!process.flagExit) {
    process.flagExit = true;
    // отправка данных
  }
};
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы