我有一个代码,我必须使用eval()
JavaScript
函数执行(如果您想讨论是否可以使用eval()
函数,请在此处添加信息: Why is using the JavaScript eval function a bad idea?但不要专注于此处)。
在一些代码之后,它使用eval()
函数执行,如果它没有在try-catch
块上给出任何异常,则此代码将更改,我将不得不再次执行eval()
在另一个try-catch
块中运行。
问题在于,如果我将一个try-catch
块放在另一个上面,它们将一起执行,代码将不会被清除,因此eval()
函数将被执行两次。像这样:
var code = some code here;
try{
eval(code); //Here the code has divs animations
$("#animate").promise().done(function(){
checkAnimation();
//Clear code
});
}catch(error){
console.log(error);
}
try{
eval(code); //Animations with the same div
$("#animate").promise().done(function(){
checkAnimation();
});
}catch(error){
console.log(error);
}
我还看到有一个finally
语句,但无论try-catch块是否发生异常都会被执行,因此它对我没用。
我的想法
我认为在清除代码之后我可以包含第二个try-catch
块但是我不知道它是否是一个好习惯,因为它在另一个函数内部并且该函数内部的代码也可以生成异常
我的问题
我是否可以仅在第一个try-catch
块无效时才执行try-catch
块?
编辑:我编辑了我的代码,因为我忘了把它放在我的第二个try-catch
我也有动画。
提前致谢!
答案 0 :(得分:0)
done
回调中的任何内容都是a)计划在动画结束后执行,b)因此将独立于外部try..catch
块。您需要将要在// clear code
a)之后执行的任何代码放入回调中,并将b)放入新的try..catch
块中:
try {
eval(code);
$("#animate").promise().done(function () {
try {
checkAnimation();
//Clear code
eval(code);
} catch (error) {
console.log(error);
}
});
} catch (error) {
console.log(error);
}
为了更好地可视化回调独立于第一个try..catch
的方式/原因,请将回调写为独立函数而不是内联函数:
try {
eval(code);
$("#animate").promise().done(callback);
} catch (error) {
console.log(error);
}
function callback() {
try {
checkAnimation();
//Clear code
eval(code);
} catch (error) {
console.log(error);
}
}
答案 1 :(得分:0)
最后,我解决了以下问题:
var count = 0;
function evaluateCode(){
try {
eval(code);
$("#animate").promise().done(function(){
if(count == 0){
checkAnimation1(); //I clear the code inside this function
}
else{
checkAnimation2();
}
count++;
});
} catch (e) {
alert(e);
}
}
我把这个功能叫了两次。如果我没有这样做,代码永远不会在执行下一个eval(code)
之前清除。