Некорректная обработка ошибок при использовании вложенных блоков try / catch - PullRequest
0 голосов
/ 21 ноября 2018

У меня настроена обработка ошибок с использованием блоков try/catch, которые в упрощенном виде выглядят так:

  try {
    // .. Some application logic

    try {
      // .. some async api code
    } catch (e) {
      throw new Error("Api Error")
    }

    return true;

  } catch (e) {
    throw new Error("Unknown Error")
  }

И проблема в том, что всякий раз, когда я ожидаю, что "Ошибка API" будет возвращена, я получаю "Неизвестная ошибка "кажется, что все ошибки распространяются на самый внешний улов?

Есть ли способ избежать этого или другого подхода, который допускает обработку вложенных ошибок?

1 Ответ

0 голосов
/ 21 ноября 2018

В вашем коде проверьте, происходит ли исключение внутри первого блока try.Если это так, внутренняя попытка не будет выполнена.

try {
    // .. Some application logic
    // exception occurs here
    // below code is not executed and the control is given to catch block
    try {
      //this did not execute
      // .. some async api code
    } catch (e) {
      throw new Error("Api Error")
    }

    return true;

  } 
  catch (e) {
    //control came here
    throw new Error("Unknown Error")
  }

Это также возможный случай:

try {
    // .. Some application logic
    // no exceptions occur here
    // below code is executed
    try {
      //this did not execute
      //exception here
      // .. some async api code
    } catch (e) {
      //control came here and this threw APIerror
      throw new Error("Api Error")
    }
    //this did not execute as the previous catch block raised another exception
    return true;

  } 
  catch (e) {
    //control came here
    throw new Error("Unknown Error")
  }

Надеюсь, это поможет:)

...