2
0
mirror of https://github.com/esiur/esiur-dart.git synced 2026-04-02 09:38:20 +00:00
This commit is contained in:
2021-07-21 12:18:01 +03:00
parent 737397da11
commit 6be04c39ed
27 changed files with 659 additions and 513 deletions

View File

@@ -1,14 +1,16 @@
import 'AsyncReply.dart';
import '../Resource/Warehouse.dart';
class AsyncBag<T> extends AsyncReply<List<T>> {
List<AsyncReply<T>> _replies = new List<AsyncReply<T>>();
List<AsyncReply<T>> _replies = <AsyncReply<T>>[];
List<T> _results = <T>[];
int _count = 0;
bool _sealedBag = false;
Type arrayType;
seal() {
//print("SEALED");
@@ -16,7 +18,7 @@ class AsyncBag<T> extends AsyncReply<List<T>> {
_sealedBag = true;
if (_results.length == 0) trigger(new List<T>());
if (_results.length == 0) trigger(<T>[]);
for (var i = 0; i < _results.length; i++) {
var k = _replies[i];
@@ -25,8 +27,15 @@ class AsyncBag<T> extends AsyncReply<List<T>> {
k.then<dynamic>((r) {
_results[index] = r;
_count++;
//print("Seal ${_count}/${_results.length}");
if (_count == _results.length) trigger(_results);
if (_count == _results.length) {
if (arrayType != null) {
var ar = Warehouse.createArray(arrayType);
_results.forEach(ar.add);
trigger(ar);
} else {
trigger(_results);
}
}
}).error((ex) {
triggerError(ex);
});