Как отправить http ответ от обратного вызова setTimeout - экспресс - PullRequest
3 голосов
/ 24 июня 2019

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

В следующем примере я установил 20 мс как период ожидания, в течение которого services.getReport() должен быть обработан, в противном случае API должен отправить ответ как response_timed_out.

Следующий код работает нормально, но выдает исключение как

Невозможно установить заголовки после их отправки клиенту

router.post("/getReport", (req, res) => {
  setTimeout(() => {
    res.send({ status:503, msg: "response_timed_out" });
  }, 20);
  services.getReport(req, res);
});

1 Ответ

3 голосов
/ 24 июня 2019

Вы можете использовать метод setTimeout для объекта запроса, чтобы определить время ожидания для каждого маршрута.

router.post("/getReport", (req, res) => {
  req.setTimeout(2000);
  services.getReport(req, res);
});

Вы также можете глобально определить время ожидания для всех маршрутов на сервере..

const server = app.listen(port, () => {});
server.setTimeout(15000);

Вы также можете указать второй аргумент - обратный вызов, который будет запущен по истечении времени ожидания.Если вам нужен обратный вызов, вы звоните setTimeout в ответе.

router.post("/getReport", (req, res) => {
  res.setTimeout(2000, () => res.send('timed_out'));
  services.getReport(req, res);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...