| 
									
										
										
										
											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) |