Java 在GWT中,如果我们现在刷新浏览器,则异步调用已经在进行中,该事件正在触发,但进程尚未完成
在GWT中,一个异步调用已经在进行中,我将在完成此调用后触发一个事件。如果我们现在刷新浏览器,该事件正在触发,但进程尚未完成,我如何解决此问题。请帮忙 这是我正在使用的代码块:Java 在GWT中,如果我们现在刷新浏览器,则异步调用已经在进行中,该事件正在触发,但进程尚未完成,java,gwt,Java,Gwt,在GWT中,一个异步调用已经在进行中,我将在完成此调用后触发一个事件。如果我们现在刷新浏览器,该事件正在触发,但进程尚未完成,我如何解决此问题。请帮忙 这是我正在使用的代码块: private void rpcMethod(final String nounToTrack, final ImportResultDTO importResult, final String selectedNounName) { service.checkNounImportExp
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);
}
}
});
}
private void rpc方法(最终字符串nounotrack、最终ImportResultDTO importResult、最终字符串selectedNounName){
service.checkNonuImportExportStatus(NonuntTrack,new AsyncCallback()){
@凌驾
失败时公开作废(最终可丢弃){
如果(捕捉到StatusCodeException的实例){
eventBus.fireEvent(新的CurrentNotificationChangedEvent(true));
}否则{
已捕获。printStackTrace();
rpactoremovenounImportExportStatusAttribute(nounotTrack);
}
clearDataGridHeaders();
}
@凌驾
成功时公共无效(最终字符串结果){
if(result.equals(BodDeskMessageConstants.COMPLETED)| | result.contains(BodDeskMessageConstants.EXCEPTIONSTATUS)){
if(result.contains(BodDeskMessageConstants.EXCEPTIONSTATUS)){
eventBus.fireEvent(新的CurrentNotificationChangedEvent(true));
}否则{
log.info(“新通知正在发生……3”);
eventBus.fireEvent(新的CurrentNotificationChangedEvent(true));
}
}否则{
RPCTocheckNonuImportExportStatus(NonuntTrack、importResult、SelectedNonueName);
}
}
});
}
如果rpc调用失败/成功,我们将触发一个事件以查看新通知是否可用。现在,我启动了这个rpc调用,在执行rpc调用时刷新了浏览器。事件正在触发,但进程尚未完成。请建议如何限制事件的触发?当您卸载页面(刷新页面时也会发生这种情况)时,所有正在进行的请求都会被中止,并且您会得到一个StatusCodeException
,其中getStatusCode()
为0
(注意:无论终止请求的触发器是什么,您都会得到相同的行为:网络错误等)
然后,您可以在您的
onFailure
中检查状态代码,但如果您不希望状态代码0的其他情况出现误报,则必须侦听WindowClosingEvent
,并在那里设置一个标志。只需确保在某些其他事件(例如,成功响应或非0失败)时重新设置标志即可以防用户取消导航。我想当套接字关闭时,您会收到StatusCodeException。请检查状态代码。也许您可以通过查找特殊的状态代码来解决问题。