等待异步回调函数在java中返回 final函数functionCallback=(布尔t)->{ if(t){ plugin.setIsInstalled(Boolean.TRUE); } 返回Void.TYPE; }; 安装(插件、函数回调); if(plugin.getIsInstalled().getValue()) 返回“完成”; 其他的 返回“未完成”;

等待异步回调函数在java中返回 final函数functionCallback=(布尔t)->{ if(t){ plugin.setIsInstalled(Boolean.TRUE); } 返回Void.TYPE; }; 安装(插件、函数回调); if(plugin.getIsInstalled().getValue()) 返回“完成”; 其他的 返回“未完成”;,java,asynccallback,Java,Asynccallback,一旦回调完成执行,我想检查是否(plugin.getIsInstalled().getValue())。在回调完成执行之前,如何防止执行此if条件?回调主要用于在特定任务完成后执行任务。因此,最好将要执行的代码分离到一个不同的函数调用中 如果要在回调后执行某些操作,请使用嵌套回调 您可以使用在回调函数中调用的FutureTask: final Function<Boolean, ? extends Class<Void>> functionCallback = (Bool

一旦回调完成执行,我想检查
是否(plugin.getIsInstalled().getValue())
。在回调完成执行之前,如何防止执行此if条件?

回调主要用于在特定任务完成后执行任务。因此,最好将要执行的代码分离到一个不同的函数调用中


如果要在回调后执行某些操作,请使用嵌套回调

您可以使用在回调函数中调用的
FutureTask

final Function<Boolean, ? extends Class<Void>> functionCallback = (Boolean t) -> {
   if(t) {
     plugin.setIsInstalled(Boolean.TRUE);             
   }
   return Void.TYPE;
};

foo.install(plugin,functionCallback);

if(plugin.getIsInstalled().getValue())
  return "done";
else 
  return "not done";
final FutureTask ft=new FutureTask(()->{},new Object());
最终函数functionCallback=(布尔t)->{
if(t){
plugin.setIsInstalled(Boolean.TRUE);
ft.run();
}
返回Void.TYPE;
};
安装(插件、函数回调);
ft.get();
if(plugin.getIsInstalled().getValue())
返回“完成”;
其他的
返回“未完成”;
Future.get
等待调用
run
方法,您还可以使用接受超时的
get
-方法,以便在超时时间过长时做出反应

  • 您可以使用运行函数时释放的
    倒计时锁存器
    重入锁存器
  • 您的
    foo#install
    可以返回一个
    CompletableFuture
    ,您可以按如下方式使用结果
  • CompletableFuture=CompletableFuture.supplyAsync(()->1);
    future.tenaccept((v)->System.out.println(“v=“+v”);
    
  • 函数本身有一个
    和另一个
    方法,您可以使用该方法运行应用后所需的任何内容
    javafx包的
    getIsInstalled
    的返回类型是什么?BooleanProperty。此属性设置在回调函数中,我希望在回调完成执行后访问该函数
    final FutureTask<Object> ft = new FutureTask<Object>(() -> {}, new Object());
    final Function<Boolean, ? extends Class<Void>> functionCallback = (Boolean t) -> {
        if(t) {
            plugin.setIsInstalled(Boolean.TRUE);
            ft.run();
        }
        return Void.TYPE;
    };
    
    foo.install(plugin,functionCallback); 
    ft.get();
    if(plugin.getIsInstalled().getValue())
        return "done";
    else 
        return "not done";