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

标签 javascript for-loop callback break

我有如下代码:

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/

相关文章:

angularjs - 如何使用 $q 在 AngularJs 中多次回调 promise ?

javascript - html javascript中的无限滚动

javascript - ExtJS 4 年月选择器

javascript - 检查所有参数的助手node.js - sails - Express

javascript - jQuery 日期选择器本地化不起作用

php - for循环中递增字符有效,递减不?

c# - 如何访问属性内部的属性?

javascript - 为什么 for(var i = 0; i < 600000000000; i++) {} 在 JavaScript 中运行这么长时间

c++ - 函数/仿函数作为模板参数。它们可以储存吗?

ios - GPUImage:当过滤器完成处理来自 GPUImageVideoCamera 的帧时是否有回调函数