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

时间:2019-04-29 10:02:46

标签: javascript error-handling try-catch

我有这个“测试”代码:

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

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

func2();

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

3 个答案:

答案 0 :(得分:1)

此代码应使您了解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();

答案 1 :(得分:0)

不确定确切的位置,但这应该可以工作:

请确保您检查了您的真实控制台

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();

答案 2 :(得分:0)

func1中不需要单独的try / catch块,因为它已经在func2的错误处理程序中。在这种情况下,您从func1引发的任何错误都会被func2

自动捕获

function func1(){
            throw new Error('oops');
    }
    
    function func2(){
        try{
            func1();
        }catch(err){
            alert(err.message);
        }
    }
    
    func2();