dart - 等待其他 future 提出的 future

标签 dart dart-async

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

相关文章:

flutter - 从第二个屏幕导航返回时关闭AlertDialog并刷新页面 float

model-view-controller - Dart 中修改实例变量的回调函数的范围

sqlite - Flutter:在进行大量数据库操作时避免 UI 卡住

constructor - 构造函数中的 future 不起作用

dart - 等待DONE作业状态-BigQuery的Dart客户端

ios - 如何使用 flutter 将文本文件保存在 ios 的外部存储中?

class - 如何在没有 initstate 的情况下使用异步值初始化 dart 类的私有(private)属性?

Dart - 如何解构方法参数中的记录?

flutter - 在 flutter 中,在 initstate() 之前调用了dependOnInheritedElement()

Dart - 帮助我理解 Dart 上的这段代码是如何工作的