mak_ufo
@mak_ufo

Как правильнее обработать ошибки в методе класса?

Здравствуйте. Есть некий класс с двумя методами. На данный момент ошибки я обрабатываю так:
class Geo {
   async method() {
      try {
          return await _method()
      } catch (err) {
          throw err
      }
   }

   async _method() {
      try {
         return await someFunc()
      } catch (err) {
         throw err
      }
   }
}

app.post('/test', async (req, res) => {
  try {
     const geo = new Geo()
     geo.method()
  } catch (err) {
     console.log(err)
  }
})


Правильно ли я понимаю, что я могу убрать try/catch из методов класса Geo? Ведь если я оберну в try/catch вызов geo.method(), то всё работать будет так же. А то не хочется огородить избыточные try/catch везде
  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
rockon404
@rockon404
Frontend Developer
1. Конструкция:
try {
  // что угодно
} catch (err) {
  throw err;
}

не имеет смысла. Так как она равносильна:
// что угодно

2. Использование aсинхронной функции с одним лишь возвратом:
async method() {
  return await _method();
}

так же бессмысленно и код можно упростить до:
method() {
  return  _method();
}

3. "огородить избыточные try/catch везде" неправильно, потому что:
const foo = () => {
  try {
    bar();
  } catch (e) {
    // этот блок не будет вызван никогда, так как ошибка перехватывается в вызове bar()
  }
};

const bar = () => {
  try {
    dangerousCall();
  } catch (e) {
    // этот блок будет вызван в случае ошибки вызова dangerousCall()
  }
}

try {
  foo();
} catch (e) {
  // этот блок не будет вызван никогда, так как ошибка перехватывается в вызове bar()
}

Демо

4. Обрабатывайте ошибку там, где выполняется функция, которая может ее инициировать.

Правильно ли я понимаю, что я могу убрать try/catch из методов класса Geo? Ведь если я оберну в try/catch вызов geo.method(), то всё работать будет так же.

Нет это было бы неправильным решением. Смотрите пункт 4.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
18 апр. 2024, в 07:58
500 руб./в час
18 апр. 2024, в 07:22
45000 руб./за проект
18 апр. 2024, в 01:12
150000 руб./за проект