我正在使用 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
仍然是空的(它会被正确填充,但稍后,在所有 Future 完成之后)。我认为问题在于 getByKey()
调用创建的 Futures 没有被 forEach()
调用创建的 Futures“捕获”。
如何更正我的代码以正确捕获结果?
最佳答案
代码来自How do I do this jquery pattern in dart?看起来和你的很相似
对于 _db.keys()
的每个条目将 future 添加到数组中,然后等待 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));
});
}
关于dart - 等待其他 future 提出的 future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23969680/