在 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);
}
}
我需要在 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);
}
}