【问题标题】:GWT - synchronous return of a methodGWT - 方法的同步返回
【发布时间】:2013-02-17 11:00:01
【问题描述】:

好的,GWT 中没有同步调用。

但如果我有这样的事情:

class XXX {
    Config c=new Config();
    c.doSomething();
}

和类配置

public class Config {


    private static HashMap<String,String> map;

    public Config(){
        final ServerProxyAsync serverProxy= GWT.create(ServerProxy.class);
        serverProxy.getParameters(new AsyncCallback<HashMap<String,String>>() {
            @Override
            public void onFailure(Throwable caught) {
                System.out.println("getParameters: FAILED!");
                map=null;
            }

            @Override
            public void onSuccess(HashMap<String, String> result) {
                System.out.println("getParameters: OK!");
                map=result; 
                 // RETURN NOW!!!!

            }

        });
    }

如果异步调用没有终止,我不能这样做doSomething(),因为有时会在地图初始化之前调用该方法。 有什么办法吗?

【问题讨论】:

    标签: java gwt rpc gwt-rpc synchronous


    【解决方案1】:

    doSomething() 中的onSuccess() 怎么样?

    你不能使用synchronous call in GWT.即使你以某种方式做到了它不是一个好习惯

    当你需要这个时,你必须在你的 RPC 调用的onSuccess(); 中做这些事情。

    因此,最好的办法是简单地使用异步方法并通过提供的回调继续执行。您最终将获得更好的用户体验,以及更专业的外观
    应用。

    【讨论】:

    • 感谢您的回答。不幸的是,我不能将 doSomething() 放在 onSuccess() 中,因为有时我需要调用 doSomething1() 有时需要调用 doSomething2()... Config 这是一个初始化我的应用程序的一些参数的类,我需要使用它用于不同的目的。
    • @nap.gab 我认为你所说的不是一个无法解决的问题。我在开发 GWT 时遇到过这样的问题,我可以解决它们。也许你应该问一个新的、更具体的问题,并提供更多细节。
    【解决方案2】:

    只需扩展您的Config 类以获取RunnableCallback。像这样的:

    public class Config {
    
        private static HashMap<String,String> map;
    
        private final Runnable callback;
    
        public Config(Runnable callback){
            this.run = run;
            final ServerProxyAsync serverProxy= GWT.create(ServerProxy.class);
            serverProxy.getParameters(new AsyncCallback<HashMap<String,String>>() {
                @Override
                public void onFailure(Throwable caught) {
                    System.out.println("getParameters: FAILED!");
                    map=null;
                }
    
                @Override
                public void onSuccess(HashMap<String, String> result) {
                    System.out.println("getParameters: OK!");
                    map=result; 
                    callback.run();
                }
            });
        }
    }
    

    那么你可以这样使用它:

    class XXX {
       final Runnable callback = new Runnable() {
           @Override
           public void run() {
               dosomething1();
           } 
        };
        Config c=new Config(callback);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 2016-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多