Dart:你如何让 Future 等待 Stream?

Posted

技术标签:

【中文标题】Dart:你如何让 Future 等待 Stream?【英文标题】:Dart: How do you make a Future wait for a Stream? 【发布时间】:2018-09-18 06:46:17 【问题描述】:

我想等待 bool 为真,然后从 Future 返回,但我似乎无法让我的 Future 等待 Stream。

Future<bool> ready() 
  return new Future<bool>(() 
    StreamSubscription readySub;
    _readyStream.listen((aBool) 
      if (aBool) 
        return true;
      
    );
  );

【问题讨论】:

【参考方案1】:

您可以使用 Stream 方法 firstWhere 创建一个未来,当您的 Stream 发出 true 值时解析。

Future<bool> whenTrue(Stream<bool> source) 
  return source.firstWhere((bool item) => item);

没有流方法的替代实现可以在流上使用await for 语法。

Future<bool> whenTrue(Stream<bool> source) async 
  await for (bool value in source) 
    if (value) 
      return value;
    
  
  // stream exited without a true value, maybe return an exception.

【讨论】:

我们是否必须为它创建一个未来的构建器?【参考方案2】:
Future<void> _myFuture() async 
  Completer<void> _complete = Completer();
  Stream.value('value').listen((event) ).onDone(() 
    _complete.complete();
  );
  return _complete.future;

【讨论】:

以上是关于Dart:你如何让 Future 等待 Stream?的主要内容,如果未能解决你的问题,请参考以下文章

在 dart 中调试时如何访问 Future 值?

异步编程之 Future

异步编程之 Future

Dart Future.wait 等待多个期货并返回不同类型的结果

等待我的班级初始化(或如何等待 Future 完成)?

如何在 Flutter/Dart 中将 Future<double> 转换为 double?