Я написал API-интерфейс node.js, используя платформу Express. Я использую await и async. Я ловлю асинхронную функцию в блоке try catch. Однако в методе catch (err) ошибка не возвращается.
try {
const job = await this.jobRepository.functionDoesNotExist();
if (job.success === false) {
return res.status(404).json({
success: false,
status: 404,
data: job,
message: "Failed to retrieve job"
});
}
return res.status(200).json({
success: true,
status: 200,
data: job.data,
message: "Successfully retrieved job"
});
} catch (err) {
return res.status(500).json({
success: false,
status: 500,
data: err,
message: "The server threw an unxpected errror"
});
}
В приведенном выше примере я намеренно вызываю функцию, которая не существует, чтобы она выдавала ошибку.
Ответ, который я получаю, ниже. Он попадает в блок catch, но ошибка не добавляется в объект данных.
{
"success": false,
"status": 500,
"data": {},
"message": "The server threw an unxpected errror"
}
Однако, если я переместу нижнюю строку из блока try catch. Консоль выдаст следующую ошибку.
const job = await this.jobRepository.functionDoesNotExist();
"error":{},"level":"error","message":"uncaughtException: this.jobRepository.functionDoesNotExist is not a function\nTypeError: this.jobRepository.functionDoesNotExist is not a function\n at JobController.<anonymous>
Итак, мой вопрос: почему эта ошибка не отображается в ответе, когда вызов выполняется в блоке try catch.