只用一个try-catch块就可以捕获几个例外?

时间:2011-11-29 18:52:12

标签: javascript exception exception-handling closures

在这个javascript代码f.init()中控制整个程序流程:

var f = function() {
    return {
        init: function(var1) {
            try {
                f.f1(1)
            } catch (e) {
                alert(e);
            }
            try {
                f.f2(1)
            } catch (e) {
                alert(e);
            }
            // ...
            // more try-catch blocks                
            // ...
        },
        f1: function() {
            throw Error('f1 called');
        },
        f2: function() {
            throw Error('f2 called');
        }
    };
}();

f.init();

如何只在一个try-catch块中集中所有异常管理?像这样:

var f = function() {
    return {
        init: function(var1) {
            f.f1(1) // this cut the control flow if thrown some error
            f.f2(1) // so this is not called
        },
        f1: function() {
                throw Error('f1 called');
        },
        f2: function() {
                throw Error('f2 called');
        }
    };
}();

try {
    f.init();
} catch (e) {
    alert(e);
}

之前的代码在抛出一些错误后切断了流程。

2 个答案:

答案 0 :(得分:4)

你不能。抛出错误后,程序流程就会中断。

答案 1 :(得分:0)

你做不到。但是有一个处理多重捕获的技巧:

try{

 try{
   firstTrial();
 }
 catch(e1){
   secondTrial();
 }

}catch(e2){
   thirdTrial();
}