deduplicate<T> method
Deduplicates concurrent requests sharing key within this scope only.
Implementation
Future<T> deduplicate<T>(List<dynamic> key, Future<T> Function() fetcher) {
_assertAlive();
final keyStr = BloomData.normalizeKey(key);
if (_inFlightRequests.containsKey(keyStr)) {
return _inFlightRequests[keyStr]!.future as Future<T>;
}
final completer = Completer<T>();
_inFlightRequests[keyStr] = completer;
fetcher().then((val) {
_inFlightRequests.remove(keyStr);
if (!completer.isCompleted) completer.complete(val);
}).catchError((Object err, StackTrace st) {
_inFlightRequests.remove(keyStr);
if (!completer.isCompleted) completer.completeError(err, st);
});
return completer.future;
}