getOrCreateAsync<T> method

Future<T> getOrCreateAsync<T>(
  1. Object key,
  2. Future<T> factory(
    1. ICacheEntry entry
    )
)

Async version of getOrCreate.

Gets the value associated with key, or creates and caches a new value using the async factory if not found.

Example:

final value = await cache.getOrCreateAsync<String>('key', (entry) async {
  entry.slidingExpiration = Duration(minutes: 5);
  return await fetchFromApi();
});

Implementation

Future<T> getOrCreateAsync<T>(
  Object key,
  Future<T> Function(ICacheEntry entry) factory,
) async {
  T? result;
  if (tryGetValue<T>(key, (value) => result = value)) {
    return result as T;
  }

  final entry = createEntry(key);
  final value = await factory(entry);
  entry.value = value;
  _commitEntry(entry);

  return value;
}