中断或循环GWT回调响应

时间:2013-06-12 07:33:41

标签: gwt smartgwt

我希望打破 GWT回调的执行方法响应中的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.   
                            }
                   }
}

有人可以帮助我吗?

1 个答案:

答案 0 :(得分: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);