2016-07-24 01:45:49 +05:30
|
|
|
---
|
|
|
|
layout: pattern
|
|
|
|
title: Promise
|
|
|
|
folder: promise
|
|
|
|
permalink: /patterns/promise/
|
2017-03-25 22:07:10 +01:00
|
|
|
pumlid: DOqv4i8m301xNW4FYDLJvIl2rYHYBDcZWtmVKr3jDZkxUw15IhyzM6lFHcdzVaPCVm8ONkNWEFELJbQ71ccKEWIuvuKhXJT-S6laVEWsCO9C7GHz2KmRmav0KVzUqgJCtsydROjV
|
2016-08-04 18:10:50 +05:30
|
|
|
categories: Concurrency
|
2016-07-24 01:45:49 +05:30
|
|
|
tags:
|
|
|
|
- Java
|
2016-08-04 18:10:50 +05:30
|
|
|
- Functional
|
|
|
|
- Reactive
|
2016-07-24 01:45:49 +05:30
|
|
|
- Difficulty-Intermediate
|
|
|
|
---
|
|
|
|
|
|
|
|
## Also known as
|
|
|
|
CompletableFuture
|
|
|
|
|
|
|
|
## Intent
|
|
|
|
A Promise represents a proxy for a value not necessarily known when the promise is created. It
|
|
|
|
allows you to associate dependent promises to an asynchronous action's eventual success value or
|
|
|
|
failure reason. Promises are a way to write async code that still appears as though it is executing
|
|
|
|
in a synchronous way.
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
## Applicability
|
|
|
|
Promise pattern is applicable in concurrent programming when some work needs to be done asynchronously
|
|
|
|
and:
|
|
|
|
|
2017-08-31 01:50:33 +05:30
|
|
|
* code maintainability and readability suffers due to callback hell.
|
2016-07-24 01:45:49 +05:30
|
|
|
* you need to compose promises and need better error handling for asynchronous tasks.
|
|
|
|
* you want to use functional style of programming.
|
|
|
|
|
|
|
|
|
|
|
|
## Real world examples
|
|
|
|
|
|
|
|
* [java.util.concurrent.CompletableFuture](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html)
|
|
|
|
* [Guava ListenableFuture](https://github.com/google/guava/wiki/ListenableFutureExplained)
|
|
|
|
|
|
|
|
## Related Patterns
|
|
|
|
* Async Method Invocation
|
|
|
|
* Callback
|
|
|
|
|
|
|
|
## Credits
|
|
|
|
|
|
|
|
* [You are missing the point to Promises](https://gist.github.com/domenic/3889970)
|
2017-08-31 01:50:33 +05:30
|
|
|
* [Functional style callbacks using CompletableFuture](https://www.infoq.com/articles/Functional-Style-Callbacks-Using-CompletableFuture)
|