如何在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
相关产品推荐
相关产品推荐

