如何在GWT中使用同步调用或等待调用完成

如何在GWT中使用同步调用或等待调用完成,gwt,web,Gwt,Web,此方法正在更新测试变量。但问题是,如果条件不等待调用完成,它就会执行并产生错误的结果。任何建议 ((GWTServiceUsersAsync)GWT.create(GWTServiceUsers.class)).checkSession(callbackcheck); if(test==0) { MessageBox.alert("Access denied", "Access denied, please log in", null); return 0; } else { re

此方法正在更新测试变量。但问题是,如果条件不等待调用完成,它就会执行并产生错误的结果。任何建议

((GWTServiceUsersAsync)GWT.create(GWTServiceUsers.class)).checkSession(callbackcheck);

if(test==0) {
  MessageBox.alert("Access denied", "Access denied, please log in", null);
  return 0;
} else {
  return 1;
}

异步意味着您不知道回调何时发生,这就是它不等待的原因。同样在java中,我们通常使用布尔(真、假)而不是数字。下面是一个您将要做的示例:

 GWTServiceUsersAsync service = GWT.create(GWTServiceUsersAsync.class)
    service.checkSession(new AsyncCallback() {
       public void onSuccess(boolean test) {
         if(!test) {
            MessageBox.alert("Access denied", "Access denied, please log in", null);
            responseHandlingMethod(true);
         }
         responseHandlingMethod(test);
       }

        public void onFailure(Exception e) {
             responseHandlingMethod(test);
        }
    }

检查会话之后的其余代码可以在responseHandling方法中处理。我建议您遵循谷歌喜欢的一些教程。

您迫切需要重新阅读RPC上的GWT文档。您必须使用回调从服务器获取一些内容。这就是所谓的异步编程,这就是为什么有异步接口。在发布问题之前,请学习GWT基础知识。兄弟,我知道这一点,但问题是如何停止客户端线程,以便更新变量。您不能“停止”客户端线程,这是不可能的。您提供了一个回调。你对RPC有一个基本的误解。再次阅读文档。@TravisWebb如果使用同步XmlHttpRequest,实际上这是可能的,但最终结果很糟糕,因为整个浏览器将冻结,直到请求完成。但它在某些情况下非常有用。