我目前有以下相关代码段:
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
?
答案 0 :(得分:3)
回调是异步运行的,这意味着在回调仍然从服务器获取数据时执行其他代码(调用后的行)。
如果您只想在回调返回后执行某些操作,请从回调的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
之前设置`ssh $1@$2 > /etc/kafka/kafka_2.11-0.9.0.0/config/test.sh <<EOL
broker.id=$3
listeners=$4
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/tmp/kafka-logs
num.partitions=1
num.recovery.threads.per.data.dir=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
log.cleaner.enable=false
zookeeper.connection.timeout.ms=6000
delete.topic.enable=true
ssl.client.auth=required
security.inter.broker.protocol=SSL
EOL`
。