Прерывание для или зацикливание ответа обратного вызова GWT

Я хочу разорвать цикл for в ответе метода execute обратного вызова GWT.

Например,

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 ответ

Решение

Когда вы вызываете асинхронный метод, вы не знаете, сколько времени это займет. В ваших примерах все эти вызовы будут отправлены практически в одно мгновение, но ответ придет в любое время в будущем, поэтому порядок не гарантируется.

Конечно, вы не можете разорвать цикл внутри вашего обратного вызова, но вы можете обработать цикл внутри вашего обратного вызова, вызывая из него асинхронный метод каждый раз, когда завершается один вызов.

Этот пример должен работать в вашем случае, и все обратные вызовы будут выполняться последовательно.

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);
Другие вопросы по тегам