这是一个Promises/A+规范的Java 8下实现的开源项目Promiser-java.
使用很简单:
创建一个Promiser对象:
Promiser<T, U> p = new Promiser<T, U>((Resolver<T> resolve, Rejecter<U> reject) -> { //异步处理代码放在处理 // Place your asynchronous process here, and make sure // to trigger resolve.run() or reject.run() when needed.
});
|
通过下面代码处理异步结果:
p.success((T result) -> { // Handle success here
}) .error((U err) -> { // Handle error here
})
|
案例:
下面异步案例是用延迟500毫秒启动运行任务。
Promiser<String, Integer> p = new Promiser<String, Integer>((Resolver<String> resolve, Rejecter<Integer> reject) -> { int DELAY = 500;
new Timer().schedule(new TimerTask() { @Override public void run() { resolve.run("I'm done !"); //resolving reject.run(404); //rejecting } }, DELAY);
});
|
你可以使用Promiser的回调函数来处理promise成功与否:
p.success((String result) -> { // Handle success here }) .error((Integer err) -> { // Handle failure here })
|
很显然,你的Java 8异步代码具有了Javascript的味道,当然,处理异步的Future方法最高境界是Monad。
YannickDot/promiser-java · GitHub