我希望打破 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.
}
}
}
有人可以帮助我吗?
答案 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);