gpt4 book ai didi

Javascript 在回调函数中打破 for 循环

转载 作者:可可西里 更新时间:2023-11-01 02:34:22 24 4
gpt4 key购买 nike

我有如下代码:

function test(obj) {

if(//some conditon) {
obj.onload();
}else{
obj.onerror();
}
}


for(var i=0;i<4;i++){

test({
onload:function(e){
//some code to run
},
onerror:function(e){
break;
}


});
}

要点是 test() 函数是一个发出 XHR 请求的函数(它实际上是 Appcelerator Titanium 平台的一个 API,所以我无法控制它),我正在循环调用测试函数。我需要在 onerror 函数上中断循环,但我收到一条错误消息,指出中断不在循环或 switch 语句内。我该如何重写它?

最佳答案

如果您的代码示例确实代表了一些实际代码(即所有处理都在同一事件循环中完成),您可以执行以下操作:

function test(obj) {

if (some_condition) {
return obj.onload();
} else {
return obj.onerror();
}
}

var result;
for(var i=0; i<4; i++){

result = test({
onload:function(e){
//some code to run
return true;
},
onerror:function(e){
return false;
}


});

if (!result) {
break;
}
}

否则,如果有一些异步完成的事情,您必须顺序调用 test,而不是并行调用。例如,

function test(obj) {
doSomeAjaxRequest(arguments, function (err, result) {
if (some_condition) {
obj.onload();
} else {
obj.onerror();
}
});
}

var f = function (i) {
if (i >= 4) return;
test({
onload:function(e){
//some code to run
f(i+1);
},
onerror:function(e){
break;
}
});
}

f(0);

关于Javascript 在回调函数中打破 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11842686/

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