Почему метод, вызываемый как обратный вызов в ответ на сигнал SIGINT, не завершается полностью до завершения процесса? - PullRequest
0 голосов
/ 13 января 2019

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

Я добавил функцию обратного вызова к сигналу SIGINT, используя process.on('SIGINT', cb)

var stop = () => {
  console.log("stopping server");
  return new Promise((resolve, reject) =>
    server.close(() => { console.log("server closed"); resolve(); }))
    .then(() => new Promise((resolve, reject) => setTimeout(() => { console.log("time out finished"); resolve(); }, 5000)))
    .then(() => process.exit(0));
}

process.on("SIGINT", stop);

Я добавил туда setTimeout, просто чтобы проверить, ждет ли сервер полной остановки.

Когда я отправляю SIGINT процессу, я получаю вывод

stopping server

В некоторых случаях и сервер остановки, и сервер закрывают логи, но не всегда.

Я пытался реализовать функцию ожидания из этого предыдущего вопроса: Как предотвратить завершение Node.js во время ожидания обратного вызова? , но я все еще достигаю тех же результатов, что и выше.

Кто-нибудь знает обходной путь, который позволит этому методу полностью завершить работу до выхода из сервера?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...