Как вывести ошибку в одной функции, чтобы она была поймана другой функцией? - PullRequest
2 голосов
/ 29 апреля 2019

У меня есть этот "тестовый" код:

function func1(){
    try{
    ...stuff...
    }catch(err){
        throw new Error();
    }
}

function func2(){
    try{
        func1();
    }catch(err){
        console.log("ERROR")
    }
}

func2();

У меня есть функция, которая выдает ошибку в catch в операторе try-catch. Я хочу, чтобы, если func1 выбрасывает Error, он попадает в первый оператор try-catch, но когда я пытаюсь это сделать, он не попадает в первый оператор, он просто приостанавливает код и возвращает ошибку. Что я сделал не так? и это неправильный способ сделать это?

Ответы [ 3 ]

1 голос
/ 29 апреля 2019

Этот код должен дать вам представление о том, как работают блоки try/catch.При первом вызове функции мы вызываем func2, в котором есть блок try/catch.В консоли видно, что ошибка обнаружена и выполнение продолжается.Затем мы вызываем func1, который выбрасывает неперехваченную ошибку, которая отображается в консоли как ошибка.

function func1() {
  console.log('func1...');
  throw new Error('something bad happened!');
}

function func2() {
  console.log('func2...');
  try {
    func1();
  } catch (err) {
    console.log('Caught error');
  }
}

console.log('func2()');
func2();

console.log('func1()');
func1();
0 голосов
/ 29 апреля 2019

Нет необходимости в отдельном блоке try / catch в func1, потому что он уже находится в обработчике ошибок func2.В этом случае, любая ошибка, которую вы выбросите из func1, будет автоматически перехвачена func2

function func1(){
            throw new Error('oops');
    }
    
    function func2(){
        try{
            func1();
        }catch(err){
            alert(err.message);
        }
    }
    
    func2();
0 голосов
/ 29 апреля 2019

Не знаю точно, где вы застряли, но это должно сработать:

Убедитесь, что вы проверили свою настоящую консоль

function func1() {
  try {
    throw new Error('hi from func1')
  } catch (err) {
    throw err;
  }
}

function func2() {
  try {
    func1();
  } catch (err) {
    // this doesn't work in stack snippets console
    // hit f12 to see your real console
    console.log('catched in func2', err)
  }
}

func2();
...