Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解决GWT中等待RPC响应的问题?_Gwt_Rpc - Fatal编程技术网

如何解决GWT中等待RPC响应的问题?

如何解决GWT中等待RPC响应的问题?,gwt,rpc,Gwt,Rpc,我知道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[]

我知道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];

}
公共静态字符串htsl(字符串语句)
{
final DataBaseAsync db=GWT.create(DataBase.class);
字符串cookie=staticContent.getCookie(“ll”);
字符串快捷方式=cookie.split(“/”[1];
最终字符串[]拉拉=新字符串[1];
getTranslated(句子、快捷方式、新AsyncCallback(){
@凌驾
成功时的公共void(字符串结果){
拉拉[0]=结果;
//这个结果我想在静态函数htsl中返回?
}
@凌驾
失败时的公共无效(可丢弃){
//TODO自动生成的方法存根
}
});
//这里我有一个空白的结果,因为RPC比te返回慢。。
而我一直都是空白结果
返回拉拉[0];
}

我知道这不好,但是。。如果没有有效的解决方案,如何等待响应?

使
htsl
异步(非阻塞,即通过回调响应而不是返回值)

这样做:

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);
}
公共静态字符串htsl(字符串语句,异步回调myCallback){
final DataBaseAsync db=GWT.create(DataBase.class);
字符串cookie=staticContent.getCookie(“ll”);
字符串快捷方式=cookie.split(“/”[1];
最终字符串[]拉拉=新字符串[1];
getTranslated(句子、快捷方式、myCallback);
}

然后让另一个类实现AsyncCallback,将其作为
myCallback
参数传递给
htsl
方法和Bob的叔叔。

参见Jeroen的答案,与我的答案相同,但带有示例代码。不过,您也可以使用一个或一个自定义接口作为参数,并从RPC的
AsyncCallback
调用它。如果您不想向调用者公开错误处理,那么定制接口只能有一个
onSuccess
(我宁愿称之为
onTranslated
)。