Как «перехватить все» в NodeJSJavascript

Форум по Javascript
Ответить
Anonymous
 Как «перехватить все» в NodeJS

Сообщение Anonymous »

Я создаю инфраструктурный уровень, который должен периодически запускать «обработчики».
Я не пишу обработчики, их логика может различаться.
Обработчики могут выполняться одновременно.
Я хочу, чтобы инфраструктура обеспечивала изоляцию, т. е. инфраструктура должна гарантировать, что сбой, любой сбой на уровне приложения в одном обработчике, не влияет на другие обработчики, работающие «в то же время».
В настоящее время я окружил каждый обработчик запускается с помощью try-catch, но, как кажется, существует много типов ошибок, которые, когда происходят, не перехватываются в предложении catch и, таким образом, приводят к сбою службы (поскольку они запускаются из другого контекста).
Я предполагаю, что на уровне обработчика можно построить обработчик таким образом, чтобы обрабатывались все ошибки, и во многих местах именно это и происходит. Моя проблема в том, что если кто-то «забыл» обработать ошибку на уровне обработчика, я, как инфраструктурный уровень, не могу «отловить» эти ошибки за него, поэтому я не могу обеспечить изоляцию и гарантировать сбой в 1 обработчике. не влияет на других.
Каков машинописный способ обработки такого случая?
Код, иллюстрирующий проблему (предположим, он находится внутри асинхронной функции):

Код: Выделить всё

try {
await new Promise((resolve, reject) => {
setTimeout(() => {
throw new Error('This error is not caught!');
}, 0)
})
} catch {
console.log("the error never gets here");
}
Одно из решений найдено: прослушивать событие uncaughtException и обрабатывать его там, поэтому добавить к инициализации моего сервиса что-то вроде:

Код: Выделить всё

process.on('uncaughtException', (err) => {
console.error('uncaught exception', err.message);
});
Это решает проблему, но я не уверен, что это хорошая практика, и мне не хватает контекста, но, возможно, это нормально.
Есть ли лучший способ добиться того, чего я хочу?

Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-nodejs
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»