在我的GWT平台应用程序中,我实现了一种方法,其中一步是从服务器获取数据,下一步依赖于它。我想阻止我的方法进一步执行代码,直到异步调用完成。
应该是简单的东西,但我找不到方法。
发布于 2012-06-19 20:36:06
我认为你忽略了网络异步的要点。
在异步调用完成之前阻塞客户端代码的执行并不被认为是好的实践(这是一种反模式)。
因此,在异步代码完成之前,不要阻塞执行,请执行以下操作:
< code >G213
发布于 2012-06-19 00:27:20
我不是GWT专家,但我知道如何以简单的方式做到这一点。如果有人告诉我如何正确地做这件事,我将非常感激,因为我也对此很感兴趣。您可以只创建包含所需代码的方法,并将其命名为onSuccess或执行以下操作:
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.RootPanel;
public class Aaa implements EntryPoint {
private final MyServiceAsync service = GWT
.create(MyService.class);
private Timer t;
public void onModuleLoad() {
t = new Timer() {
@Override
public void run() {
// Make something or call function
Window.alert("Next Step");
}
};
final Button sendButton = new Button("Send");
sendButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
service.sendInfo("Send First Step Info",
new AsyncCallback<String>() {
@Override
public void onSuccess(String result) {
Window.alert("Success Call");
// Call Next step code or function
t.schedule(1);
}
@Override
public void onFailure(Throwable caught) {
Window.alert("Failure Call");
}
});
}
});
RootPanel.get().add(sendButton);
}
}发布于 2012-06-19 18:31:40
为什么使用Timer
final Button sendButton = new Button("Send");
sendButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
service.sendInfo("Send First Step Info",
new AsyncCallback<String>() {
@Override
public void onSuccess(String result) {
Window.alert("Success Call");
nextStep(result);
}
@Override
public void onFailure(Throwable caught) {
Window.alert("Failure Call");
}
});
}
});
private void nextStep(String data) {
}https://stackoverflow.com/questions/11086591
复制相似问题