You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dart中多次await Stream(或其他事件队列)?

在Dart中逐个await Stream事件的方法

如果你想像代码里虚构的eventStream.next那样,分步等待Stream的每一个事件,可以使用Dart提供的StreamIterator类,它专门用来逐个遍历Stream中的事件。

实现代码

Future<void> xxx() async {
  final eventStream = foo();
  final iterator = StreamIterator(eventStream);
  
  try {
    // 等待第一个事件
    if (await iterator.moveNext()) {
      final firstEvent = iterator.current;
      // 执行第一个事件对应的操作
    }

    // 等待第二个事件
    if (await iterator.moveNext()) {
      final secondEvent = iterator.current;
      // 执行第二个事件对应的操作
    }

    // 等待第三个事件
    if (await iterator.moveNext()) {
      final thirdEvent = iterator.current;
      // 执行第三个事件对应的操作
    }
  } finally {
    await iterator.cancel(); // 务必关闭迭代器,释放相关资源
  }
}

关键说明

  • StreamIterator.moveNext():异步方法,会等待Stream的下一个事件到来,返回true表示成功获取到事件,false表示Stream已结束无更多事件。
  • StreamIterator.current:当moveNext()返回true时,通过该属性获取当前事件值。
  • 必须在finally块调用cancel():无论操作成功与否,都要关闭迭代器,避免资源泄漏。

这种方式比用计数器的await for循环更直观,完全匹配你“分步await每个事件”的需求,无需额外计数判断逻辑。

内容的提问来源于stack exchange,提问作者somebody4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 11:15:29