我使用Lawndart库来访问浏览器数据,并希望收集一组查询的结果。这就是我认为应该起作用的地方:
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));
}
但是,当调用回调时,map
仍为空(它会正确填充,但稍后,在所有Futures完成后)。我认为问题在于getByKey()
来电创建的期货不会被"捕获。由forEach()
电话创建的期货。
如何更正我的代码以正确捕获结果?
答案 0 :(得分:3)
来自How do I do this jquery pattern in dart?的代码与您的代码非常相似
对于_db.keys()
的每个条目,将一个未来添加到数组中,然后等待所有这些条目由Future.wait()
完成
不确定此代码是否有效(请参阅关于链接问题的答案的评论)
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));
});
}