3

我正在使用 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()

如何更正我的代码以正确捕获结果?

4

1 回答 1

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));
  });
}
于 2014-05-31T12:06:50.860 回答