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

eir*_*krl 10 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;
        }


    });
}
Run Code Online (Sandbox Code Playgroud)

要点是test()函数是一个发出XHR请求的函数(它实际上是Appcelerator Titanium平台的API,所以我无法控制它)而且我正在循环调用测试函数.我需要打破onerror函数的循环,但是我得到一个错误,说中断不在循环或switch语句中.我怎么能改写这个?

pen*_*tur 12

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

否则,如果异步完成,则必须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);
Run Code Online (Sandbox Code Playgroud)