簡體   English   中英

如何從嵌套函數中打破javascript for循環

[英]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+"&param2="+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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM