Java 如何延迟gwt对数据库的调用?

Java 如何延迟gwt对数据库的调用?,java,gwt,Java,Gwt,我使用gwt+java。应用程序正在使用多个数据库。问题在于,查询速度比流程数据库更改快,这就是ui中数据不正确的原因。我怎么能耽搁呢 reps.addChangeHandler(new ChangeHandler() { public void onChange(ChangeEvent event) { final String repPath = reps.getValue(reps.getSelectedIndex()); RootPanel.get("lo

我使用gwt+java。应用程序正在使用多个数据库。问题在于,查询速度比流程数据库更改快,这就是ui中数据不正确的原因。我怎么能耽搁呢

reps.addChangeHandler(new ChangeHandler() {
    public void onChange(ChangeEvent event) {
    final String repPath = reps.getValue(reps.getSelectedIndex());
        RootPanel.get("loadingbarImg").setVisible(true);    
        reps.setEnabled(false);
//next line change database
        serverCall("changeRep" + repPath);
 //then I update the tables "git" and "bugs"   
        serverCall("git");
        serverCall("bugs");
        reps.setEnabled(true);
    }
}
);

方法serverCall()不返回任何值。这是gwt的客户端,因此Thread.sleep()是不可接受的。

我认为您缺少了最重要的部分

GWT是一个客户机/服务器应用程序。JavaScript是完全异步的。因此,应用程序将在
serverCall(“changeRep”+repPath)中进行异步调用下一个调用可能会在这个调用之后、服务器执行“changerep”调用之前立即执行

如果必须确保顺序,则需要实现异步回调:

更新

serverCall("firstaction",new AsyncCallback(){

    public void onSuccess(Void v /*or what ever*/){
        serverCall("secondaction" /*need firstaction to be finished*/, 
                   callBackForSecondaction);
    }

    public void onError(Exception e){
        // Make some errorhandling
    }
});

在这种情况下,仅当第一个操作成功完成时,才会执行第二个操作。在Java8之前,异步代码看起来像是回调的拼图

您应该为向服务器发出的连续请求定义单个回调。因为您永远不知道哪个请求首先得到处理,然后返回给客户机。这取决于您在服务器端执行的处理类型。因此,为了回答您的问题,回调不是按照它们在代码中出现的顺序实现的

作为提示,您的服务器调用方法应该如下所示:

void serverCall(String inputParam) {
   if(inputParam.startsWithText.equals("changeRep")
       processChangeRepInput(inputParam);
}

函数processChangeRepInput应该定义一个回调函数,在其onSuccess方法上,您可以调用另一个方法,比如processGitInput(),它在内部定义了自己的回调函数,并且在其onSuccess方法中,您可以调用您希望执行的任何下一次服务器端数据库更新。

请参见,方法serverCall已实现回调。那么,您的意思是我应该再做一次服务器调用以确保数据库已更改吗?回调是否总是按照它们在代码中出现的顺序实现?方法serverCall根据字符串参数执行不同的异步回调。因此,我可以添加检查回调。