如何从嵌套函数中断javascript for循环

qwa*_*waz 0 javascript loops for-loop

当我尝试从函数中断出父循环时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);
}
Run Code Online (Sandbox Code Playgroud)

jfr*_*d00 6

因为Ajax调用是异步的,所以你的循环已经很久很久了.分配给的函数onreadystatechange将来会被调用.你的for循环运行完成,那时所有的ajax调用都已经启动,然后它们将逐一完成,因为系统会收到响应.

也许您不明白默认情况下Ajax调用是异步的.这意味着for循环启动每个ajax调用并继续运行(并启动所有ajax调用),而ajax调用由其他地方的服务器处理.然后,在for循环完成后的一段时间后,将onreadystatechange调用回调,指示其中一个ajax调用现已完成.在这一点上停止for循环已经太晚了,因为它已经完成了.


如果你更好地解释你想要实现的目标,我们可以帮助你做到这一点.例如,如果你想发送一个ajax调用,检查它的结果,然后决定是否要继续更多的ajax调用,那么就不能使用for循环来启动它们.您将不得不通过执行一次ajax调用进行迭代,然后当完成该调用时,您将根据其在完成回调中的结果来决定是否调用下一个调用,依此类推.