如何解决在 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(未找到)

如何使用 HttpClient 发送 GWT-RPC 请求?

GWT RPC 如何在其有效负载中编码 java.lang.Long 值?