繁体   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