我有这个“测试”代码:
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语句捕获,但是当我尝试这个时,它不会被第一个语句捕获,它只是暂停代码并返回错误。我做错了什么?这是错误的做法吗?
此代码应该让您了解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();
不确定你到底在哪里,但这应该工作:
确保检查真正的控制台
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();
在func1
中不需要单独的try / catch块,因为它已经在func2
的错误处理程序中。在这种情况下,你从func1
抛出的任何错误都会被func2
自动捕获
function func1(){
throw new Error('oops');
}
function func2(){
try{
func1();
}catch(err){
alert(err.message);
}
}
func2();