代码之家  ›  专栏  ›  技术社区  ›  Christian

如何在Dart中从Iterable<Future<MyType>>到Future<List<MyType>>

  •  0
  • Christian  · 技术社区  · 6 年前

    我想使用map逐个从异步函数加载多个描述:

      Future<List<Description>> loadDescriptions(List<String> questions) async {
        Iterable<Future<Description>> iterable =
            questions.map((question) async => (await loadDescription(question)));
        return iterable.toList();
      }
    

    .toList() 不幸的是,这不管用。有没有办法重写dart中的代码以便 Future<List<Description>>

    0 回复  |  直到 6 年前
        1
  •  2
  •   julemand101    5 年前

    我想以下几点应该行得通:

    Future<List<Description>> loadDescriptions(List<String> questions) async =>
        [for (final question in questions) await loadDescription(question)];
    

    我应该补充一点,这个解决方案中的行为是 Future await 在序列中的下一个之前(也被@jamesdlin提到),在某些情况下这可能是次优的。

    相反,我们可以 等待 未来 同时让Dart获取结果,然后返回 List<Description> 如果使用 Future.wait

    Future<List<Description>> loadDescriptions(List<String> questions) =>
        Future.wait(questions.map(loadDescription));