2015-05-08 16 views
6

Tôi đang đọc trên khung Play của Java nhưng không có nhiều kinh nghiệm trong Java. Ai đó có thể vui lòng giải thích điều nàyPhát! framework Java Promise example

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

Tôi nhận được rằng họ đang tạo lời hứa promiseOfPiValue nghĩa vụ tính toán gấp đôi không đồng bộ. Sau đó, họ gọi map trên ví dụ về lời hứa mà họ đang chuyển một phiên bản mới của Function làm đối số, đã triển khai phương thức apply.

Phần bản đồ là nơi tôi bị lạc - phương thức bản đồ hoạt động như thế nào? Dường như nó trả về một lời hứa mới về loại Result, nhưng logic của việc gọi phương thức apply bên trong việc triển khai Function là gì?

Trả lời

2

Từ tài liệu hướng dẫn chơi:

Maps lời hứa này cho một lời hứa của loại B. Hàm function được áp dụng ngay khi lời hứa được đổi.

Chức năng:

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

sẽ chuyển đổi các giá trị pi loại Double-Result sử dụng ok() chức năng quy định tại Controller càng sớm càng computePIAsynchronously kết thúc.

nhưng logic của việc gọi phương thức áp dụng bên trong triển khai chức năng là gì?

Đây là vẻ đẹp của PromisesScala. Khung hứa hẹn Scala sẽ đảm bảo chức năng được áp dụng khi lời hứa được đổi. Nếu bạn muốn đọc về chủ đề này, tôi khuyên bạn nên lấy nguồn và tài liệu của scala.concurrent.ExecutionContext.