@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() {}

знаю, что это антипаттерн, но всё же
  • Вопрос задан
  • 2523 просмотра
Пригласить эксперта
Ответы на вопрос 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;
    // отправка данных
  }
};
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы