gpt4 book ai didi

java - 在继续之前等待 AsyncCallback

转载 作者:行者123 更新时间:2023-11-29 04:49:55 25 4
gpt4 key购买 nike

我目前有以下相关代码片段:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com