javascript尝试捕获vs if then else
如果语句成功,我需要能够运行一系列代码。如果javascript有一个try/catch/else,那么我会将所有代码放在else中并完成它。我不想使用布尔值来模拟try/catch/else中的else。我的理解是,try可以处理错误,但如果做同样的事情就不行了?如果是这样,我将不得不使用If,但如果QueryInterface失败,我不希望我的程序崩溃。所以我的问题是,如果QueryInterface失败,那么else将在下面的if中执行,对吗?如果是这样的话,那么我想使用try/catch的唯一原因就是阻塞错误条件 现有方法:javascript尝试捕获vs if then else,javascript,try-catch,Javascript,Try Catch,如果语句成功,我需要能够运行一系列代码。如果javascript有一个try/catch/else,那么我会将所有代码放在else中并完成它。我不想使用布尔值来模拟try/catch/else中的else。我的理解是,try可以处理错误,但如果做同样的事情就不行了?如果是这样,我将不得不使用If,但如果QueryInterface失败,我不希望我的程序崩溃。所以我的问题是,如果QueryInterface失败,那么else将在下面的if中执行,对吗?如果是这样的话,那么我想使用try/catch
try {
channel = subject.QueryInterface(Ci.nsIHttpChannel);
} catch(err) {
booSuccess = false;
intErrorCount++
}
if (booSuccess == true) {
...bunch of stuff...
}
拟议方法:
if (channel = subject.QueryInterface(Ci.nsIHttpChannel)) {
...bunch of stuff...
} else {
intErrorCount++
}
不,不能简单地用if/else替换try/catch。如果一行抛出错误,javascript解释器将停止该脚本的执行。否,抛出异常(第一个代码段捕获)与返回错误代码非常不同(
通道==0
,第二个代码段检查)。他们不一样
要避免该布尔变量,您可能要做的是
try {
channel = subject.QueryInterface(Ci.nsIHttpChannel);
...bunch of stuff...
} catch(err) {
intErrorCount++
}
但是如果在一堆东西中发生异常,这也会增加错误计数。
booSuccess==true
-哎哟。可能的重复不幸的是,在一堆东西中有大量的代码。。。要包含嵌套的try。。。我不确定一次尝试如何在另一次尝试中起作用。try
在try
中起作用。内部的try
将捕获异常,如果可以处理,则执行将正常进行。或者它不能并且想要重新调用,或者处理程序代码抛出;然后outhertry
捕获该异常。