在 Java 中与异步 API 接口的良好设计模式是什么

What is a good design pattern of interfacing with asynchronous API in Java

我需要在 Java 中链接一系列专有异步 API 调用。

我把一些有用的东西放在一起(至少对于一个快乐的案例),但想不出更好的方法来组织这个代码。我想知道是否有设计模式或库可以将丑陋包装在一组漂亮的 API 或库中。类似于 C++ 中的 js promises 或 async。谢谢!!

这是我目前的工作:

// call API1
api.send(...., new myMethodCallbackHandler()));

        while (myAtomicFlag.get() == 0) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        if (myAtomicFlag.get() == 1){
            // success 
            successFlag = true;
            myAtomicFlag.set(0);
            .. do more success stuff
            // call API2
        }else{
            successFlag = false;
            // handle problems
        }
}

目前Java不支持async/await,但是Kotlin支持,所以你可以在Kotlin中写这段代码,而你程序的其余部分可以留在Java .

然而,

Java 有一个等效于 js 的承诺:CompletableFuture。可以用 通过以下方式完成您的任务:

for (API api: apilist) {
  MyMethodCallbackHandler handler = new MyMethodCallbackHandler();
  api.send(...., handler);
  try {
    Object result = handler.get();
    .. do more success stuff
  } catch (Throwable ex) {
    // handle problems
  }
}

我假设回调处理程序必须实现以下接口:

interface CallbackHandler {
   void onSuccess(Object result);
   void onError(Throwable error);
}

那么 class MyMethodCallbackHandler 可以声明为:

class MyMethodCallbackHandler extends CompletableFuture implements CallbackHandler {
   void onSuccess(Object result) {
      super.complete(result);
   }
   void onError(Throwable error) {
      super.completeExceptionally(error);
   }
}