Я нашел несколько подходов к чистой обработке ошибок с помощью async / await.
Некоторые предлагают:
- обработка ошибок сразу по обещанию с
.catch()
(но он смешивается Синтаксис Promise и await) - с обещаниями возвращают
[data, err]
вместо броска (но это увеличивает код с проверкой ошибок) - создает ошибки, которые наследуют объект Error и совпадают на
instanceof
в * Блок 1013 * (это хорошо и нормально, но требует определения как можно большего числа классов).
Прежде чем я реализую опцию 3 во всем своем коде, мне интересно, почему я не могу найти следующее где угодно. Если моя AsyncFunction не собирается выдавать разные ошибки, почему бы просто не сопоставить функцию напрямую?
async function a() {}
async function b() {
throw b;
}
(async () => {
try {
await a();
await b();
}
catch (err) {
switch (err) {
case a: console.log('a threw'); break;
case b: console.log('b threw'); break; // this one is executed
}
}
}) ()
Могут быть очевидные причины, по которым мы никогда не должны этого делать, но я застрял там.