玩!框架Java Promise示例

use*_*088 6 java promise java-7 playframework-2.0

我正在阅读Java的Play框架,但没有太多的Java经验.有人可以解释一下

Promise<Double> promiseOfPIValue = computePIAsynchronously();
Promise<Result> promiseOfResult = promiseOfPIValue.map(
  new Function<Double,Result>() {
    public Result apply(Double pi) {
      return ok("PI value computed: " + pi);
    }
  }
);
Run Code Online (Sandbox Code Playgroud)

我知道他们正在创建一个promiseOfPiValue应该异步计算双重的承诺.然后,他们调用map那个他们传递一个新实例Function作为参数的promise实例,该实例实现了一个apply方法.

地图部分是我迷路的地方 - 地图方法如何运作?看起来它返回了一个新的类型的承诺Result,但是在实现中调用apply方法的逻辑是什么Function

Mon*_*ari 3

来自播放文档:

将此承诺映射到类型的承诺Bfunction一旦承诺被兑现,该功能就会被应用。

功能:

new Function<Double,Result>() {
    public Result apply(Double pi) {
      return ok("PI value computed: " + pi);
    }
}
Run Code Online (Sandbox Code Playgroud)

完成后将立即使用定义的函数将pi类型的值转换Double为。Resultok()ControllercomputePIAsynchronously

但是在 Function 的实现中调用 apply 方法的逻辑是什么?

Promises这就是和的美妙之处Scala。Scala Promise 框架将确保在赎回 Promise 时应用该函数。如果您想阅读该主题,我建议您获取scala.concurrent.ExecutionContext.