gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 12:27:52 68 4
gpt4 key购买 nike

当我尝试使用 break 从函数中中断父循环时 - 它给出以下错误:

未捕获的语法错误:非法的中断语句

这是代码的相关部分:

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);
}

最佳答案

当您点击break语句时,您的循环早已结束,因为Ajax调用是异步的。分配给 onreadystatechange 的函数将在将来被调用。您的 for 循环将运行至完成,此时所有 ajax 调用均已启动,并且当系统收到响应时,它们将一一完成。

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

<小时/>

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

关于javascript - 如何从嵌套函数中中断 JavaScript for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26128872/

68 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com