- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前有以下相关代码片段:
public class MyEntryPoint implements EntryPoint {
private boolean areFieldsEnabled = false;
@Override
public void onModuleLoad(){
addFields();
}
private void addFields(){
Button button = new Button("Show fields");
button.addClickHandler(new ClickHandler(){
@Override
public void onClick(final ClickEvent event){
String entityType = ...;
String entityId = ...;
checkIfFieldsAreEnabled();
MyEntryPoint.this.fields = new FieldsValuesDiv(entityType,
Long.valueOf(entityId), MyEntryPoint.this.areFieldsEnabled);
wrapper.add(MyEntryPoint.this.fields);
}
});
}
private void checkIfFieldsAreEnabled(){
this.fieldsService.areValuesEditable(new AsyncCallback<Boolean>(){
@Override
public void onFailure(final Throwable caught){
Window.alert(caught.getLocalizedMessage());
}
@Override
public void onSuccess(final Boolean result){
MyEntryPoint.this.areFieldsEnabled = result;
}
});
}
}
这会产生一个“显示字段”按钮。当我单击它时,会加载 Fields GWT 组件并显示字段。目前所有字段默认禁用,即使 checkIfFieldsAreEnabled()
就在它之前完成。当我单击“隐藏字段”按钮(上面的代码中未显示),然后再次单击“显示字段”按钮时,它确实起作用了。
原因是什么?它不等待 AsyncCallback<Boolean>
的结果,因此有时它会起作用,有时却不起作用,具体取决于异步调用的完成速度。我来自 C# 背景,其中 async
/await
可以使用。当我用谷歌搜索 Java 等效项时,我遇到了 this SO answer by Jon Skeet ,这基本上说明了 Java 中没有这样的东西。然而,这是大约三年前的事了,所以我想知道从那时起是否有任何变化。
如果没有,有谁知道我如何等待 AsyncCallback<Boolean>
这设置了 areFieldsEnabled
boolean 值?
最佳答案
回调是异步运行的,这意味着您的其他代码(调用后的行)在回调仍在从服务器获取数据的同时执行。
如果您只想在回调返回后执行某些操作,请从回调的 onSuccess
方法中调用它:
this.fieldsService.areValuesEditable(new AsyncCallback<Boolean>(){
@Override
public void onFailure(final Throwable caught){
Window.alert(caught.getLocalizedMessage());
}
@Override
public void onSuccess(final Boolean result){
MyEntryPoint.this.areFieldsEnabled = result;
// Do whatever needs to be done here
MyEntryPoint.this.fields = new FieldsValuesDiv(entityType, Long.valueOf(entityId), MyEntryPoint.this.areFieldsEnabled);
wrapper.add(MyEntryPoint.this.fields);
}
});
这将确保在您尝试访问它之前设置 areFieldsEnabled
。
关于java - 在继续之前等待 AsyncCallback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35845181/
我需要实现线程以缩短紧凑型框架应用程序的加载时间。我想启动一个后台线程来调用外部 API,而主线程缓存一些表单。后台线程完成后,我需要再触发两个线程来填充数据缓存。 我需要后台线程能够执行回调方法,所
我的申请中还有另一个问题。我在 MainActivity 中使用以下代码从我的 ContactAdapter 中获取用户数据: private List loadContactData() {
我目前有以下相关代码片段: public class MyEntryPoint implements EntryPoint { private boolean areFieldsEnabled
我正在通过 tcp 实现乒乓球。我有用 C# 编写的 Pinger。还有两只火锅。一个用 C# 编写,另一个用 C++ 编写。 Pinger 只是向 pongers 发送消息,pongers 回复他。
我想通过List进入AsyncCallback在函数中 LoadHistoryAsync(List Items)但是result.AsyncState在 CallForNewData(IAsyncRe
我需要使用异步委托(delegate)调用一个函数,当我浏览 AsyncCallback 的教程时,我看到异步回调定义如下: static void CallbackMethod(IAsyncResu
我最近注意到以下模式,但我没有完全掌握 CompletedSynchronously 属性的用法: IAsyncResult channelOpenResult = channel.BeginOpen
下面的代码是不言自明的,我的问题也很简单: 为什么 AsyncCallback 方法“HandleConnect”不向“Connect”方法传播异常 以及如何传播它? public void
在做我的应用程序时,我厌倦了总是在 asynccallback onfailure 中实现相同的默认错误处理(显示消息、catch.printstacktrace 等)。 我想知道您是否可以进行通用治
嗨,我有一段代码使用套接字连接到服务器 Try 'Connect To The Server Dim socketclient As New TcpClient Dim suc
我有一个数组 premisasObtenidas,我想用从 GWT AsyncCallback 获取的内容来更新它。该调用工作正常,并且 onSuccess 的代码执行,但是当我尝试将其返回的内容添加
我想使用 .NET-FTP 库 ( http://netftp.codeplex.com )。该库提供 BeginOpenRead(string,AsyncCallback,object) 以使用异步
我有一个类可以检查用户的操作、验证数据并调用 AsyncCallBack 以确定它是否是有效条目。我在两个地方使用了相同的逻辑,一个是用户单击“确定”,另一个是“输入”。通过在一种情况下调用 Asyn
我有一个 AsyncCallback 调用,它联系我的 GWT-RPC 服务并检索一些数据。我试图将该数据存储到一个类中,该类具有一个静态方法来存储查询结果。但是,我注意到数据没有填充到静态数据成员中
正是问题所说的。 我已阅读给定 here 的 MSDN 文章,并且(除非我是盲人),看不到任何明确证实这一点的地方。 为了提供更多范围,我主要指的是 Socket 类中提供的 Socket.Begin
我希望你能在以下方面帮助我: 我有一个 WebService 方法,它应该返回一个 CompensationPlanReturnReturn 对象数组。该方法是这样调用的: //This is the
我正在学习套接字编程,我有以下功能: public void OnDataReceived(IAsyncResult asyn) 回调是这样设置的: pfnWorkerCallBack = new A
我写了一个 HttpListener 监听其中一个端口: httpListener.BeginGetContext(new AsyncCallback(ListenerCallback), httpL
我有以下类试图充当简单的异步操作: public class AsyncLineWriter { private delegate void SynchronousWriteLineDeleg
我有一个 Stream 对象,我正在使用 BeginRead 开始(显然)读入缓冲区;读取完成后调用 AsyncCallback 函数。在此函数中,我可以检查用户是否想要获取下一个“ block ”并
我是一名优秀的程序员,十分优秀!