![](/img/trans.png)
[英]How to break a for-loop with a nested setTimeout() function in javascript?
[英]how to break javascript for-loop from nested function
當我嘗試從功能打破父環break
-它提供了以下錯誤:
Uncaught SyntaxError: Illegal break statement
這是代碼的相關部分:
for (var i = 0; i < filesLength; i++) {
myFunc(arg1, arg2, i);
}
function myFunc (arg1, arg2, i) {
var qr = "param1="+arg1+"¶m2="+arg2;
getParam = new XMLHttpRequest();
getParam.open("POST", "file.php");
getParam.send(qr);
getParam.onreadystatechange = (function(getParam){
return function() {
if(getParam.readyState == 4){
var res = getParam.responseText;
if (res == '') {
// do something...
break; << THIS ONE
}
}
}
})(getParam);
}
因為Ajax調用是異步的,所以您的循環已經很長時間了,因為您打到break語句時結束了。 將來會調用分配給onreadystatechange
的函數。 您的for
循環運行完成,並且到那時所有的ajax調用都已經開始,隨着系統收到響應,它們將一一完成。
也許您不了解默認情況下Ajax調用是異步的。 這意味着for
循環會啟動每個ajax調用並繼續運行(並啟動所有ajax調用),而其他地方的服務器會處理ajax調用。 然后,在for
循環完成后的一段時間后,將onreadystatechange
回調,指示ajax調用之一現已完成。 此時結束for
循環已經太晚了。
如果您能更好地解釋您要實現的目標,我們可以為您提供幫助。 例如,如果要發送一個ajax調用,檢查其結果,然后決定是否要繼續進行更多個ajax調用,則不能使用for
循環來啟動它們。 您將不得不通過執行一個ajax調用來進行迭代,然后在完成一個ajax調用時,根據其在完成回調中的結果來決定是否調用下一個ajax,依此類推。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.