get_queue.dart
676 Bytes
import 'dart:async';
class GetQueue {
final List<_Item> _queue = [];
bool _active = false;
void _check() async {
if (!_active && _queue.isNotEmpty) {
_active = true;
var item = _queue.removeAt(0);
try {
item.completer.complete(await item.job());
} on Exception catch (e) {
item.completer.completeError(e);
}
_active = false;
_check();
}
}
Future<T> add<T>(Function job) {
var completer = Completer<T>();
_queue.add(_Item(completer, job));
_check();
return completer.future;
}
}
class _Item {
final dynamic completer;
final dynamic job;
_Item(this.completer, this.job);
}