如何在一个函数中抛出错误以被另一个函数捕获?

Sam*_*m H 5 javascript error-handling try-catch

我有这个“测试”代码:

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

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

func2();
Run Code Online (Sandbox Code Playgroud)

我有一个函数在 try-catch-statement 中的 catch 中引发错误。我想要它,如果 func1 抛出错误,它会被第一个 try-catch-statement 捕获,但是当我尝试这个时,它不会被第一个语句捕获,它只是暂停代码并返回错误。我做错了什么?这是错误的方法吗?

Dan*_*one 6

这段代码应该让您了解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();
Run Code Online (Sandbox Code Playgroud)


Sag*_*b.g 1

不确定你到底被困在哪里,但这应该有效:

确保检查你的真实控制台

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();
Run Code Online (Sandbox Code Playgroud)