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

时间:2014-09-30 19:46:42

标签: 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);
}

1 个答案:

答案 0 :(得分:6)

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

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


如果你更好地解释你想要完成的事情,我们可以帮助你做到这一点。例如,如果您想发送一个ajax调用,检查其结果,然后决定是否要继续进行更多的ajax调用,那么您就无法使用for循环来启动它们。你必须通过执行一次ajax调用来迭代,然后当它完成时,你根据完成回调中的结果决定是否调用下一个等等。