我有一个for循环终止而没有完成循环。这似乎与在循环中是否调用另一个函数有关。
this.cycle = function() {
var list = this.getBreaches("Uncontained");
if (list.length > 0) {
for (i=0; i < list.length; i++) {
this.saveVsRupture(DC=11, i); //calls this.rupture() if save failed
}}
return 1;
};
this.saveVsRupture()调用一个滚动d20并检查结果的函数。如果保存失败,它会调用一个名为this.rupture()的方法,该方法会对此进行一些调整。
问题 如果保存投掷成功,则循环继续,但如果保存投掷失败,则运行this.rupture()函数,然后中断for循环。它应该继续运行for循环。
为什么会这样?
其他详细信息 以下是其他功能......
savingThrow = function(DC=11) {
// DC = Difficulty Check on a d20
try {
if (0 <= DC) {
var roll = Math.floor((Math.random() * 20))+1; //roll d20
var msg = "(Rolled "+roll+" vs DC "+DC+")";
console.log(msg);
if (roll >= DC) { //Saved
return true;
}
else { //Failed save
return false;
}
}
}
catch(e) {
console.log("Exception in savingThrow: "+e);
};
};
this.saveVsRupture = function(DC=1, i=null) {
try {
if (!savingThrow(DC)) {
this.rupture(i);
return false;
}
return true;
}
catch(e) {
console.log(e);
}
};
this.rupture = function(i=null) {
if (i == null) {
i = range(1,this.damageList.length).sample();
}
var hole = this.damageList[i];
var dmg = range(1,this.harmonics()).sample();
hole.rupture(dmg);
msg = "*ALERT* " + hole + " expanded by " + dmg + "% Hull Integrity @"+this.hullIntegrity();
this.log(msg);
if (hole.size % 10 == 0) {
this.health -= 25;
msg = "The ship creaks ominously.";
this.log(msg);
}
return 1;
};
答案 0 :(得分:0)
更改saveVsRupture函数,如下所示:
function saveVsRupture(a,b) {
try{
//your saveVsRupture code here...
}
catch(e){}
}
您应该通过try,catch块来捕获代码中出现的问题,以防止将它们抛到代码的顶层(本例中的浏览器)。
不要在for for循环中使用return!
更改您的代码如下:
this.cycle = function() {
var list = this.getBreaches("Uncontained");
if (list.length > 0) {
for (i=0; i < list.length; i++) {
var temp = this.saveVsRupture(DC=11, i); //calls this.rupture() if save failed
console.log(temp);
}}
return 1;
};
答案 1 :(得分:0)
考虑在try
循环中实施catch
- for
,并在try
内使用saveVsRupture函数。此实现将捕获函数中的错误,但允许程序继续运行。
答案 2 :(得分:0)
for-loop的正确语法声明了计数器变量。
for (var i=0; i < list.length; i++) {etc..
/// Causes the For-Loop to exit prematurely...
for (i=0; i < list.length; i++) {etc..
一旦&#34; var i = 0&#34;使用时,for循环按预期运行。