Выдает ошибку, когда происходит ошибка в createWriteStream - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть эта функция:

function createDevis(invoice, path) {
  const file = fs.createWriteStream(path);
  file.on("error", function (error) {
    logger.error("Inside file.on inside createDevis function");
    logger.error(error);
    file.end();
  });
  doc.pipe(file);
}

Она вызывается здесь:

models.operation_sav
  .findByPk(devisInformation.opSavId, { include: [{ all: true }] })
  .then((operationSavFound) => {
    if (operationSavFound !== null) {
      // When this function throws an error, I would like to also handle it in the catch block
      createDevis(devisData, "./generatedDocuments/devis.pdf");
    } else {
      res.status(400).json({
        tag: "Operation Sav Not found",
        message: error.message,
      });
    }
  })
  .catch((error) => {
    logger.error(error);
    res.status(400).json({
      tag: "The devis has not been generated!",
      message: error.message,
    });
  });

Я бы хотел, чтобы все ошибки обрабатывались в блоке catch. Однако то, как функция createWriteStream обрабатывает ошибки внутренне, не позволяет мне перехватить ошибку внутри блока catch:

  const file = fs.createWriteStream(path);
      file.on("error", function (error) {
        logger.error("Inside file.on inside createDevis function");
        logger.error(error);
        file.end();
      });

Это создает проблемы при ответе на запрос http, а также делает обработку ошибок в коде не простой. Я попытался выбросить ошибку внутри file.on:

  file.on("error", function (error) {
    logger.error("Inside file.on inside createDevis function");
    logger.error(error);
    console.log(error);
    file.end();
    throw new Error("Error inside createWriteStream");
  });

, чтобы перехватить ее, как и другие ошибки в блоке catch. Но это ничего не изменило.

...