Javascript обработка ошибок async / await: функция выброса совпадений в блоке catch - PullRequest
0 голосов
/ 24 января 2020

Я нашел несколько подходов к чистой обработке ошибок с помощью async / await.

Некоторые предлагают:

  1. обработка ошибок сразу по обещанию с .catch() (но он смешивается Синтаксис Promise и await)
  2. с обещаниями возвращают [data, err] вместо броска (но это увеличивает код с проверкой ошибок)
  3. создает ошибки, которые наследуют объект 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
    }
  }
}) ()

Могут быть очевидные причины, по которым мы никогда не должны этого делать, но я застрял там.

...