[英]Break a for loop from within an anonymous function
我正在嘗試從嵌套匿名函數中破壞for循環(標記為),如下所示:
function ajax(iteration, callback) {
var rtrn, xh;
if (window.XMLHttpRequest) {
xh = new XMLHttpRequest();
} else {
xh = new ActiveXObject("Microsoft.XMLHTTP");
};
xh.onreadystatechange = function() {
if (xh.readyState == 4 && xh.status == 200) {
callback(xh.responseText);
};
};
xh.open("GET", "file.php?i=" + iteration, true);
xh.send();
};
var atk_delay = 100;
loop:
for(i = 1; i <= 40; i++) {
var to = atk_delay * i;
setTimeout(
function() {
ajax(i, function(responseText) {
var div = document.getElementById("combat");
div.innerHTML += responseText;
var arrRt = responseText.split("::");
if(arrRt[0] == "stop") {
break loop;
};
});
},
to);
};
我真的不知道該如何解決。 顯然,問題在於它找不到標簽。 我該如何解決?
所以我解決了! 感謝您的幫助! 您讓我意識到我需要一種完全不同的方法!
function ajax(callback) {
var rtrn, xh;
if (window.XMLHttpRequest) {
xh = new XMLHttpRequest();
} else {
xh = new ActiveXObject("Microsoft.XMLHTTP");
};
xh.onreadystatechange = function() {
if (xh.readyState == 4 && xh.status == 200) {
callback(xh.responseText);
};
};
xh.open("GET", "file.php", true);
xh.send();
};
var atk_delay = 100;
function roll() {
ajax(function(responseText) {
var div = document.getElementById("combat");
div.innerHTML += responseText;
var arrRt = responseText.split("::");
if(arrRt[0] == "cont") {
setTimeout(roll, atk_delay);
};
});
};
setTimeout(roll, atk_delay);
通常,您要做的是在循環的每次迭代之后訪問一個變量,該變量指示您是否可以中斷。 這將在匿名函數中設置。
但是,在您的特定情況下,由於您正在調用setTimeout
,因此甚至在設置值之前,循環的執行可能已經完成。 setTimeout
將函數調度為以后執行(以毫秒為單位)。
如果已將變量標記為已完成,則可以使用變量盡早退出匿名函數。
調試匿名塊的簡單技巧-在要檢查的行之前顯式調用調試器。
function foo().then(s => {
... some code
debugger // here your code will break.
someVariableIwantToExamine
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.