Dart:你如何让未来等待流?

时间:2018-04-08 22:16:52

标签: stream dart future

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

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

1 个答案:

答案 0 :(得分:7)

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

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

没有stream方法的替代实现可以在Stream上使用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.
}