Deferred Value
The Deferred Value design pattern aims to provide a reference to the outcome of an asynchronous operation. You’ll find similar implementations in Java and Scala through Futures, and in JavaScript through Promises.
We touched upon deferred values earlier in Chapter 6, Threads and Coroutines, where we noted that Kotlin’s async()
function returns a Deferred type, which is Kotlin’s take on this pattern.
Interestingly, this Deferred
type is not just an example of the Deferred Value design pattern; it’s also an embodiment of the Proxy design pattern discussed in Chapter 3, Understanding Structural Patterns, as well as the State design pattern featured in Chapter 4, Getting Familiar with Behavioral Patterns.
To instantiate a new container for an asynchronous outcome, you can use Kotlin’s CompletableDeferred
constructor like so:
val deferred = CompletableDeferred<String>()
To populate the Deferred value with a result...