【问题标题】:In GWT, an asynchrounous call is already in progress If we refresh the browser now, that event is firing but the process is not completing在 GWT 中,异步调用已经在进行中
【发布时间】:2014-07-01 11:58:01
【问题描述】:

在 GWT 中,异步调用已在进行中,我将在完成此调用后触发一个事件。如果我们现在刷新浏览器,该事件正在触发但该过程没有完成,我该如何解决这个问题。请帮忙。

这是我正在使用的代码块:

 private void rpcMethod(final String nounToTrack, final ImportResultDTO importResult,         final String selectedNounName) {
        service.checkNounImportExportStatus(nounToTrack, new AsyncCallback<String>() {
            @Override
            public void onFailure(final Throwable caught) {
                if (caught instanceof StatusCodeException) {
                    eventBus.fireEvent(new CurrentNotificationChangedEvent(true));
                } else {
                    caught.printStackTrace();
                    rpcToRemoveNounImportExportStatusAttribute(nounToTrack);
                }
                clearDataGridHeaders();
            }

            @Override
            public void onSuccess(final String result) {

                if (result.equals(BodDeskMessageConstants.COMPLETED) || result.contains(BodDeskMessageConstants.EXCEPTIONSTATUS)) {
                    if (result.contains(BodDeskMessageConstants.EXCEPTIONSTATUS)) {
                        eventBus.fireEvent(new CurrentNotificationChangedEvent(true));
                    } else {
                        log.info("new notification is occurring..... 3");
                        eventBus.fireEvent(new CurrentNotificationChangedEvent(true));
                    }
                }  else {
                    rpcToCheckNounImportExportStatus(nounToTrack, importResult, selectedNounName);
                }
            }
        });
    }

如果 rpc 调用失败/成功,我们将触发一个事件以查看可用的新通知。现在,我开始了这个 rpc 调用,我在 rpc 调用执行时刷新了浏览器。事件正在触发,但过程尚未完成。请建议如何限制事件的触发?

【问题讨论】:

  • 我认为当套接字关闭时你会得到一个 StatusCodeException。检查状态码。也许你可以通过寻找一个特殊的状态码来解决你的问题。

标签: java gwt


【解决方案1】:

当您卸载页面时(在您刷新页面时也会发生这种情况),所有正在进行的请求都将中止,并且您会得到一个 StatusCodeException0getStatusCode()(注意:无论哪种情况,您都会得到相同的行为中止请求的触发器:网络错误等)

然后您可以检查onFailure 中的状态代码,但如果您不希望其他状态代码为 0 的情况出现误报,则必须侦听 WindowClosingEvent 并在那里设置一个标志。只要确保在其他一些事件(例如成功响应或非 0 失败)处设置标志,以防用户取消导航。

【讨论】:

    猜你喜欢
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多