У меня есть эта функция:
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. Но это ничего не изменило.