我是GWT的新手,所以请帮助我。我有循环n次循环;每个循环都将AsyncCallback
发送到服务器并获取值。但我想停止每个循环,直到服务器响应。例如
for (final String cardId : cardIds) {
cmain.ivClient.getm(cardId, cardInfoKeys, new AsyncCallback<String[]>() {
@Override
public void onFailure(Throwable caught) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void onSuccess(String[] result) {
cardPar = result;
}
}
}
如何每次等待循环?
答案 0 :(得分:2)
基本上,在这种情况下你不能真正使用for循环。
如果你知道,那么会有3个电话,你可以堆叠异步电话:
在每个onSuccess()
中,您都会触发下一次异步调用。
如果你不知道会有多少,你可以通过onSuccess
电话进行递归。
void callServer(final List<String>cardIds) {
if(cardIds.isEmpty()) return;
cmain.ivClient.getm(cardId, cardInfoKeys, new AsyncCallback<String[]>() {
@Override
public void onFailure(Throwable caught) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void onSuccess(String[] result) {
doImportantMatterWith( result );
cardIds.remove(0);
callServer(cardIds);
}
}
}
这是相当丑陋的,但是会确保只有在前一次回复成功时才会触发下一个调用。
我建议不要实现此异步调用链,而是立即从服务器请求所有结果。