1

我想打破GWT 回调的执行方法 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.   
                            }
                   }
}

有人可以帮我吗?

4

1 回答 1

5

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

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

此示例应该适用于您的情况,并且所有回调都将按顺序执行。

DSCallback myCallBack = new DSCallback() {
  int idx = 0; 
  int length = recordList.getLength();

  public void execute(DSResponse response, Object rawData, DSRequest request) {
    if (++idx < length 
          && (response.getAttribute("UnSuccess") == null 
            || !response.getAttribute("UnSuccess").equalsIgnoreCase(""))) {
      ABCDMI.addData(recordList.get(idx), this);
    }
  }
};

ABCDMI.addData(recordList.get(0), myCallBack);
于 2013-06-12T08:17:58.097 回答