Java 如何延迟gwt对数据库的调用?
我使用gwt+java。应用程序正在使用多个数据库。问题在于,查询速度比流程数据库更改快,这就是ui中数据不正确的原因。我怎么能耽搁呢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
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根据字符串参数执行不同的异步回调。因此,我可以添加检查回调。