中断或循环GWT回调响应

中断或循环GWT回调响应,gwt,smartgwt,Gwt,Smartgwt,我想在GWT回调的execute-method-response中中断for循环 比如说, for (int idx = 0; idx < recordList.getLength(); idx++) { //Starting ABC FOR LOOP ABCDMI.addData(recordList.get(idx), new DSCallback() { public voi

我想GWT回调的execute-method-response中中断for循环

比如说,

for (int idx = 0; idx < recordList.getLength(); idx++) {  //Starting ABC FOR LOOP
    ABCDMI.addData(recordList.get(idx), 
                   new DSCallback() {       
                       public void execute(DSResponse response, Object rawData, DSRequest request) {      
                            if(response.getAttribute("UnSuccess") != null && !response.getAttribute("UnSuccess").equalsIgnoreCase("")) {    
                                 break;  //I want to break ABC FOR LOOP here.   
                            }
                   }
}
for(int-idx=0;idx

有人能帮我吗?

当你调用一个异步方法时,你不知道需要多长时间。在你的例子中,所有这些调用几乎都是在同一瞬间发送的,但响应会在将来的任何时候出现,因此不能保证顺序

当然,您不能在回调中中断循环,但是您可以在每次调用完成时处理回调中的循环,从中调用异步方法

这个例子应该适用于您的情况,所有回调都将按顺序执行

DSCallback myCallBack=new DSCallback(){
int-idx=0;
int length=recordList.getLength();
public void execute(DSResponse响应、对象rawData、DSRequest请求){
如果(++idx<长度
&&(response.getAttribute(“UnSuccess”)==null
||!response.getAttribute(“未成功”).equalsIgnoreCase(“”)){
addData(recordList.get(idx),this);
}
}
};
addData(recordList.get(0),myCallBack);

调用异步方法时,您不知道需要多长时间。在您的示例中,所有这些调用几乎都会在同一瞬间发送,但响应会在将来的任何时间出现,因此顺序不一定

当然,您不能在回调中中断循环,但是您可以在每次调用完成时处理回调中的循环,从中调用异步方法

这个例子应该适用于您的情况,所有回调都将按顺序执行

DSCallback myCallBack=new DSCallback(){
int-idx=0;
int length=recordList.getLength();
public void execute(DSResponse响应、对象rawData、DSRequest请求){
如果(++idx<长度
&&(response.getAttribute(“UnSuccess”)==null
||!response.getAttribute(“未成功”).equalsIgnoreCase(“”)){
addData(recordList.get(idx),this);
}
}
};
addData(recordList.get(0),myCallBack);

您不能中断匿名类声明,因为那里只声明了
execute
方法。您想实现什么?很抱歉,我的回答完全忽略了这一点。我正在更新多个记录,但如果有任何记录未成功添加/更新,则不想继续for循环。因此我想中断语句。当前记录是异步处理的。可能是在记录#3之前处理记录#10。要在第一条不成功的记录上中断,您应该执行顺序处理,例如添加记录、等待执行、处理下一条记录等@defaultlocale:您是对的。我将对此进行研究。请查看cMyoLo的代码,你不能打破匿名类声明,因为<代码>执行<代码>方法只在那里被声明。你想要达到什么?抱歉,我的答案完全错过了这一点。我正在做多个记录的更新,但是如果没有成功添加/更新任何记录,那么就不想C了。继续for循环。所以我想把break语句放在那里。当前记录是异步处理的。可能是这样的情况,记录#10在记录#3之前处理。要在第一个不成功的记录上中断,您应该实现顺序处理,例如添加记录、等待执行、处理下一个记录等@defaultlocale:a好的。我来查一下。看看我的答案,并考虑使用MaloLo的代码。