Могу ли я иметь код logi c if в выражении catch в операторах else? - PullRequest
1 голос
/ 08 апреля 2020

Я не уверен, правильно ли это или неправильно, но что-то глубоко внутри меня говорит мне, что я делаю это неправильно, чтобы получить код logi c на catch stm. Например, мой улов выглядит примерно так:

      try{
       // do some stuff that throws some unexpected errors
      }
      catch (error) {
        if (error?.graphQLErrors[0]) {
          let msg = error.graphQLErrors[0].message
          switch (msg) {
              case 'limited':
              // TODO:: handle 
            default:
              window.location.href = "www.someurl.com";
          }
        }

В основном я думаю, что catch stm обычно должен оставаться коротким и чистым без лога c, что может вызвать другую ошибку или исключение, что произойдет, если код внутри catch генерирует ошибку?

Ответы [ 2 ]

3 голосов
/ 08 апреля 2020

Хорошо иметь logi c в вашем блоке catch, если есть logi c для обработки или сообщения об ошибке. Вот для чего нужны блоки catch.

что произойдет, если код внутри catch выдает какую-то ошибку?

Это ошибка new . Если вы не поймаете его, он будет передан вызывающему абоненту, например, c.

Пример:

function example() {
    try {
        // "x" has no method `foo` so this causes an error:
        "x".foo();
    } catch (e) {
        console.log(`Caught error in \`example\`: ${e.message}`);
        // "y" has no method `bar` so this causes an error:
        "y".bar();
    }
}

function wrapper() {
    try {
        example();
    } catch (e) {
        console.log(`Caught error in \`wrapper\`: ${e.message}`);
    }
}

wrapper();

Ошибки выбрасывания намеренно из блока catch - распространенная практика во многих местах. Вы можете свернуть оригинал в тот, который лучше обрабатывать выше или, возможно, выбросить более значимую ошибку

class MyError extends Error {
  constructor(errorCode) {
    super();
    this.errorCode = errorCode;
  }
}

function example() {
    try {
        // "x" has no method `foo` so this causes an error:
        "x".foo();
    } catch (e) {
        throw new MyError(42);
    }
}

function wrapper() {
    try {
        example();
    } catch (e) {
        if (e.errorCode === 42) {//specific
          console.log(`I know what this error means: the flux capacitor is broken`);
        } else {//generic
          console.log(`Caught error in \`wrapper\`: ${e.message}`);
        }
    }
}

wrapper();
1 голос
/ 08 апреля 2020

могу ли я иметь логический c код, если в операторе catch есть операторы else?

Да.

что произойдет, если код внутри catch бросит несколько ошибка?

Ошибка будет распространена на следующий блок try catch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...