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

问题描述 投票:2回答:3

我有这个“测试”代码:

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

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

func2();

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

javascript error-handling try-catch
3个回答
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();

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

0
投票

func1中不需要单独的try / catch块,因为它已经在func2的错误处理程序中。在这种情况下,你从func1抛出的任何错误都会被func2自动捕获

function func1(){
            throw new Error('oops');
    }
    
    function func2(){
        try{
            func1();
        }catch(err){
            alert(err.message);
        }
    }
    
    func2();
© www.soinside.com 2019 - 2024. All rights reserved.