Asynccallback with for for循环

时间:2016-05-19 14:48:54

标签: java asynchronous gwt

我是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;
        }
    }
}

如何每次等待循环?

1 个答案:

答案 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);
        }
    }
}

这是相当丑陋的,但是会确保只有在前一次回复成功时才会触发下一个调用。

我建议不要实现此异步调用链,而是立即从服务器请求所有结果。