GWT - 方法的同步返回

Posted

技术标签:

【中文标题】GWT - 方法的同步返回【英文标题】:GWT - synchronous return of a method 【发布时间】: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(),因为有时会在地图初始化之前调用该方法。 有什么办法吗?

【问题讨论】:

【参考方案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);

【讨论】:

以上是关于GWT - 方法的同步返回的主要内容,如果未能解决你的问题,请参考以下文章

在 GWT 异步回调中,如何在 onSuccess 中处理相同的返回类型?

GWT 保持同步客户端和服务器模型

GWT - 从 FormPanel 上传文件后返回对象?

GWT TypeOracle.getTypes 不返回所有类型

GWT-Rpc如何返回文件让浏览器弹出下载对话框

GWT - getThreadLocalResponse() 返回 null