Waiting for Futures raised by other Futures
dart, dart-async
Solution
the code from How do I do this jquery pattern in dart? looks very similar to yours
For each entry of `_db.keys()` a future is added to an array and then waited for all of them being finished by `Future.wait()`
Not sure if this code works (see comments on the answer on the linked question)
void fnA() {
fnB().then((_) {
// Here, all keys should have been loaded
});
}
Future fnB() {
return _db.open().then((_) {
List<Future> futures = [];
return _db.keys().forEach((String key_name) {
futures.add(_db.getByKey(key_name).then((String data) {
// do something with data
return data;
}));
}).then((_) => Future.wait(futures));
});
}
Problem
I'm using the Lawndart library to access browser data, and want to collect the results of a set of queries. Here's what I thought should work: ``` numberOfRecordsPerSection(callback) { var map = new Map(); db_sections.keys().forEach((_key) { db_sections.getByKey(_key).then((Map _section) { int count = _section.length; map[_key] = count; }); }).then(callback(map)); } ``` However, when the callback is called, `map` is still empty (it gets populated correctly, but later, after all the Futures have completed). I assume the problem is that the Futures created by the `getByKey()` calls are not "captured by" the Futures created by the `forEach()` calls. How can I correct my code to capture the result correctly?