如何解决在 GWT 中等待 RPC 响应的问题?
Posted
技术标签:
【中文标题】如何解决在 GWT 中等待 RPC 响应的问题?【英文标题】:How to solve waiting for RPC response in GWT? 【发布时间】:2013-07-18 14:11:10 【问题描述】:我知道 RPC 是异步的,但是如何以其他方式(除了等待响应)来解决这个问题:
public static String htsl(String sentence)
final DataBaseAsync db = GWT.create(DataBase.class);
String cookie = staticContent.getCookie("ll");
String shortcut = cookie.split("/")[1];
final String[] lala = new String[1];
database.getTranslated(sentence, shortcut, new AsyncCallback<String>()
@Override
public void onSuccess(String result)
lala[0]=result;
//this result I want to return in static function htsl... ?
@Override
public void onFailure(Throwable caught)
// TODO Auto-generated method stub
);
//here I have blank result, because RPC is slower than te return..
And i have always blank result
return lala[0];
我知道这不好,但是..如果没有解决这个问题,如何等待响应?
【问题讨论】:
【参考方案1】:使htsl
异步(非阻塞,即使用callack 作为响应而不是返回值)
【讨论】:
查看 Jeroen 的答案,这与我的相同,但带有示例代码。您也可以使用Callback
或自定义接口作为参数,然后从RPC 的AsyncCallback
回调它。如果您不想将错误处理暴露给调用者,自定义接口只能有一个onSuccess
(我宁愿称之为onTranslated
)。【参考方案2】:
这样做:
public static String htsl(String sentence, AsyncCallback<String> myCallback)
final DataBaseAsync db = GWT.create(DataBase.class);
String cookie = staticContent.getCookie("ll");
String shortcut = cookie.split("/")[1];
final String[] lala = new String[1];
database.getTranslated(sentence, shortcut, myCallback);
然后让其他类实现 AsyncCallback,将其作为 myCallback
参数传递给 htsl
方法,并且 Bob 是你的叔叔。
【讨论】:
以上是关于如何解决在 GWT 中等待 RPC 响应的问题?的主要内容,如果未能解决你的问题,请参考以下文章
如何在客户端到达 OnFailure() 之前处理 RPC 失败错误?在 GWT
GWT 等待 setVisibleRangeAndClearData 完成
如何使用 GWT-RPC 以外的方式访问 GWT servlet?
调用 RPC 时出错 - GWT,404 服务器响应状态为 404(未找到)