fetch method
- TokenRequestOptions options
override
Implementation
@override
Future<TokenSourceResponse> fetch(TokenRequestOptions options) async {
final existingCompleter = _inflightRequests[options];
if (existingCompleter != null && existingCompleter.isActive) {
return existingCompleter.future;
}
final completer = existingCompleter ?? ReusableCompleter<TokenSourceResponse>();
_inflightRequests[options] = completer;
final resultFuture = completer.future;
try {
final cached = await _store.retrieve();
if (cached != null && cached.options == options && _validator(cached.options, cached.response)) {
completer.complete(cached.response);
return resultFuture;
}
final response = await _wrapped.fetch(options);
await _store.store(options, response);
completer.complete(response);
return resultFuture;
} catch (e, stackTrace) {
completer.completeError(e, stackTrace);
rethrow;
} finally {
_inflightRequests.remove(options);
}
}