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
类以获取Runnable
或Callback
。像这样的:
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 中处理相同的返回类型?