2
0
mirror of https://github.com/esiur/esiur-dart.git synced 2025-05-06 12:02:57 +00:00
esiur-dart/bin/Core/AsyncBag.dart
2019-08-07 05:12:10 +03:00

59 lines
1017 B
Dart

import 'AsyncReply.dart';
class AsyncBag<T> extends AsyncReply<List<T>>
{
List<AsyncReply<T>> _replies = new List<AsyncReply<T>>();
List<T> _results = new List<T>();
int _count = 0;
bool _sealedBag = false;
seal()
{
if (_sealedBag)
return;
_sealedBag = true;
if (_results.length == 0)
trigger(new List<T>());
for (var i = 0; i < _results.length; i++)
{
var k = _replies[i];
var index = i;
k.then((r)
{
_results[index] = r;
_count++;
if (_count == _results.length)
trigger(_results);
});
}
}
add(AsyncReply<T> reply)
{
if (!_sealedBag)
{
_results.add(null);
_replies.add(reply);
}
}
addBag(AsyncBag<T> bag)
{
bag._replies.forEach((r) {
add(r);
});
}
AsyncBag()
{
}
}