当前位置: 首页 > 面试题库 >

调用异步功能时自动显示“正在加载”指示器

仲柏
2023-03-14
问题内容

我正在寻找一种在调用异步服务时自动显示和隐藏“正在加载”消息的方法,所以不要这样做:

showLoadingWidget();

service.getShapes(dbName, new AsyncCallback() {
  public void onSuccess(Shape[] result) {
    hideLoadingWidget();
    // more here...
  }

  public void onFailure(Throwable caught) {
    hideLoadingWidget();
  //more here
  }
});

我只想这样做,但是仍然在完成时显示和隐藏消息。

// this should be gone: showLoadingWidget();
service.getShapes(dbName, new AsyncCallback() {
    public void onSuccess(Shape[] result) {
        // this should be gone: hideLoadingWidget();
        // more here...
    }
    public void onFailure(Throwable caught) {
        //this should be gone:  hideLoadingWidget();
        //more here
    }
});

简而言之,我想更改异步调用的行为。感谢您提出的所有建议。

丹尼尔


问题答案:

您可以将调用本身包装在处理显示加载消息的对象中,也许对错误或其他原因重试几次。像这样:

public abstract class AsyncCall<T> implements AsyncCallback<T> {

    /** Call the service method using cb as the callback. */
    protected abstract void callService(AsyncCallback<T> cb);

    public void go(int retryCount) {
        showLoadingMessage();
        execute(retryCount);
    }

    private void execute(final int retriesLeft) {
        callService(new AsyncCallback<T>() {
            public void onFailure(Throwable t) {
                GWT.log(t.toString(), t);
                if (retriesLeft <= 0) {
                    hideLoadingMessage();
                    AsyncCall.this.onFailure(t);
                } else {
                    execute(retriesLeft - 1);
                }
            }
            public void onSuccess(T result) {
                hideLoadingMessage();
                AsyncCall.this.onSuccess(result);
            }
        });
    }

    public void onFailure(Throwable t) {
        // standard error handling
    }
    ...
}

要进行呼叫,请执行以下操作:

new AsyncCall<DTO>() {
    protected void callService(AsyncCallback<DTO> cb) {
        DemoService.App.get().someService("bla", cb);
    }
    public void onSuccess(DTO result) {
        // do something with result
    }
}.go(3); // 3 retries

您可以使用代码扩展它,以检测花费很长时间的呼叫并显示某种繁忙指示等。



 类似资料:
  • 本文向大家介绍jQuery Ajax 加载数据时异步显示加载动画,包括了jQuery Ajax 加载数据时异步显示加载动画的使用技巧和注意事项,需要的朋友参考一下  ajax加载后台数据就不说的那么细了。 看下面代码首先前台上放置代码 在js脚本文件中首先把这个图片动画隐藏 代码如下 然后异步ajax提交请求代码如下 ..................... 注意: async: true, 当

  • 问题内容: 我对Flask还是比较陌生,总体而言有点网络菜鸟,但是到目前为止,我取得了一些不错的成绩。现在,我已经有了一个表单,用户可以在其中输入查询,该查询被赋予一个函数,该函数可能需要5到30秒的时间才能返回结果(使用Freebase API查找数据)。 问题是我无法让用户知道他们的查询正在这段时间内加载,因为结果页面仅在函数完成工作后才加载。有什么办法可以显示正在加载的消息吗?我发现一些Ja

  • 问题内容: 我正在努力解决从iPhone到iPhone显示相册的问题。 如果某人在画廊内有50张照片,则一切正常。问题是,当某人有数千张照片时,图库会加载10秒钟,这对我的应用程序不利。 当我从Facebook加载图像时,会发生相同的问题。该应用程序正在等待下载所有照片,然后显示出来。我想在加载过程中一一显示图像,而不是等待它全部加载。 我知道我应该使用并且确实使用过,但是有一些我看不到的错误。

  • 本文向大家介绍leaflet加载geojson叠加显示功能代码,包括了leaflet加载geojson叠加显示功能代码的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了leaflet加载geojson叠加显示功能代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 geojson需要先制作shp,然后导入下面网站生成geojson。 ht

  • 问题内容: 示例:转到Facebook墙,滚动页面的末尾,Facebook将 异步 加载更多墙帖。或者,只需单击墙上的帖子中的图片即可。图像对话框(带有注释和较大图像)也将 异步 加载。(您可以使用firebug查看GET请求)。 但是通过查看和Firefox标签,您会看到加载指示器,就像发生回发时一样。 我知道可以通过使用an 并更改其src 来实现。就像iGoogle一样。但是我不确定Face

  • 我想在页面加载时显示1个工具提示,然后在几秒钟后隐藏它和/或在另一个工具提示悬停时隐藏它。 我已经找到了几种方法来做到这一点,但我使用了一个Elementor插件作为我的工具提示,所以它嵌套在几个div中,这让我感到困惑。 当您悬停在“div.eael-tooltip”上时-“span.eael-tooltip-text”显示(这是我想自动显示几秒钟的内容) 我知道我可能需要一些jQuery,有谁