resolve method
Future<DVPageData?>
resolve(
- DVPageRequest request,
- DVPageDataResolver resolver,
- DVPageDataMode mode
The data for request by mode: resolved, kept, served stale, or not
asked for at all.
Implementation
Future<DVPageData?> resolve(DVPageRequest request, DVPageDataResolver resolver, DVPageDataMode mode) async {
if (mode == DVPageDataMode.defer) return null;
if (mode == DVPageDataMode.await_) return resolver(request);
final String key = _keyFor(request);
final _Kept? have = await _read(key);
if (have != null && _now().difference(have.at) <= ttl) return have.data;
if (mode == DVPageDataMode.staleWhileRevalidate && have != null) {
if (_refreshing.add(key)) {
unawaited(Future<DVPageData?>.value(resolver(request)).then((DVPageData? data) async {
await _write(key, data);
}).whenComplete(() => _refreshing.remove(key)));
}
return have.data;
}
final DVPageData? data = await resolver(request);
await _write(key, data);
return data;
}