Pattern 1: Pre-fetch the result, and cache it.
The result will hopefully already be available when needed, and the async call will be made only once.
fooFuture = fetchFoo !_ # anytime when needed: foo = fooFuture _ # supports multiple calls!
Pattern 2: Load this lazily, but still cache it.
The async call will again be made only once, but it won't happen until it's needed.
barFuture = null # anytime when needed: barFuture or= fetchBar !_ bar = barFuture _ # like pattern 1 above