给Java加入Promiser功能

15-10-18 banq
    

这是一个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>

通过下面代码处理异步结果:

p.success((T result) -> {
  // Handle success here

})
.error((U err) -> {
  // Handle error here

})
<p>

案例:

下面异步案例是用延迟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);

});
<p>

你可以使用Promiser的回调函数来处理promise成功与否:

p.success((String result) -> {
  // Handle success here
})
.error((Integer err) -> {
  // Handle failure here
})
<p>

很显然,你的Java 8异步代码具有了Javascript的味道,当然,处理异步的Future方法最高境界是Monad。

YannickDot/promiser-java · GitHub

    

1