首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在异步调用完成GWT-Platform之前阻止方法调用

在异步调用完成GWT-Platform之前阻止方法调用
EN

Stack Overflow用户
提问于 2012-06-18 23:59:13
回答 4查看 8.8K关注 0票数 4

在我的GWT平台应用程序中,我实现了一种方法,其中一步是从服务器获取数据,下一步依赖于它。我想阻止我的方法进一步执行代码,直到异步调用完成。

应该是简单的东西,但我找不到方法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-19 20:36:06

我认为你忽略了网络异步的要点。

在异步调用完成之前阻塞客户端代码的执行并不被认为是好的实践(这是一种反模式)。

因此,在异步代码完成之前,不要阻塞执行,请执行以下操作:

  1. 创建异步代码完成时在全局Eventbus上激发的事件,并在其中一个Eventbus
  2. Handle中附加此事件的处理程序异步代码
  3. 显示加载指示器
  4. 异步调用完成时隐藏加载指示器并在以前创建的处理程序中的下一步在事件总线上激发事件。

< code >G213

票数 6
EN

Stack Overflow用户

发布于 2012-06-19 00:27:20

我不是GWT专家,但我知道如何以简单的方式做到这一点。如果有人告诉我如何正确地做这件事,我将非常感激,因为我也对此很感兴趣。您可以只创建包含所需代码的方法,并将其命名为onSuccess或执行以下操作:

代码语言:javascript
复制
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);
    }
}
票数 2
EN

Stack Overflow用户

发布于 2012-06-19 18:31:40

为什么使用Timer

代码语言:javascript
复制
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) {
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11086591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档