java - for 循环中的异步回调

标签 java asynchronous gwt

我是 GWT 新手,所以请帮助我。我有 for 循环 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;
        }
    }
}

如何每次都等待循环?

最佳答案

基本上,在这种情况下你不能真正使用 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);
        }
    }
}

这相当难看,但会确保只有当前一个调用成功返回时才会触发下一个调用。

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

关于java - for 循环中的异步回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37326813/

相关文章:

java - 我应该为高分列表使用什么数据结构?

ios - 如何通过 GeoFire 正确使用存储的搜索半径?

GWT - 获取浏览器时区/时间戳格式

java - 使用 RequestFactory 和 GAE 数据存储

JavaFX TableView 行颜色

java - 为什么添加 ".map(a -> a)"可以编译?

java - 缓存使用多个参数构建的对象

jquery - 如何使用 jQuery 异步加载 CSS?

image - Angular2 - 在 ngFor 内异步加载二进制图像数据

其他框架中的 GWT Event Bus 概念