Deferred Value
The goal of the Deferred Value design pattern is to return a reference to a result of an asynchronous computation. A Future in Java and Scala, and a Promise in JavaScript are both implementations of the Deferred Value design pattern.
We've already discussed deferred values in Chapter 6, Threads and Coroutines. We've seen that the async()
function returns a type called Deferred
, which is also an implementation of this design pattern.
Interestingly enough, the Deferred
value itself is an implementation of both the Proxy design pattern that we've seen in Chapter 3, Understanding Structural Patterns, and the State design pattern from Chapter 4, Getting Familiar with Behavioral Patterns.
We can create a new container for the result of an asynchronous computation using the CompletableDeferred
constructor:
val deferred = CompletableDeferred<String>()
To populate the Deferred
value with a result, we use the complete()
function, and if an...