![](/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.