在这里插入图片描述

一、转换概览

Future和Stream可以互相转换,根据场景选择合适的类型。

Stream.fromFuture

Stream.first

asStream

last

Future

Stream

Future

二、Future转Stream

Future<void> _futureToStream() async {
  final data = await Future.delayed(
    const Duration(seconds: 2),
    () => 'Future转Stream的数据',
  );

  _addEvent('Future完成: $data');
}

三、Stream转Future

Future<void> _streamToFuture() async {
  final stream = Stream.periodic(
    const Duration(milliseconds: 500),
    (i) => 'Stream数据-$i',
  ).take(5);

  await for (final data in stream) {
    _addEvent('Stream数据: $data');
  }

  final futureData = await stream.first;
  _addEvent('Stream转Future: $futureData');
}

四、转换方法对比

方法 转换方向 特点
Stream.fromFuture Future→Stream 单个事件
Stream.first Stream→Future 取第一个值
Stream.last Stream→Future 取最后一个值
await for Stream→Future 遍历所有值

五、工作流程

事件日志 Stream Future 界面 用户 事件日志 Stream Future 界面 用户 loop [每500ms] Future→Stream 创建Future 延迟2秒 返回数据 记录事件 显示日志 Stream→Future 创建Stream 产生数据 记录事件 显示日志 first获取值 返回Future

六、选择指南

单个

多个

需要异步处理

数据量

使用Future

使用Stream

需要流式处理?

转Stream

保持Future

需要等待全部?

转Future.last

保持Stream

Stream.fromFuture

Stream.last

七、事件日志

Future→Stream T0s 用户点击 T2s Future完成 T2s 记录事件 Stream→Future T0s 用户点击 T0.5s 数据1 T1.0s 数据2 T1.5s 数据3 T2.0s 数据4 T2.5s 数据5 操作时间线

要点

  • Future适合单次操作
  • Stream适合持续数据
  • 合理选择转换方法
  • 注意异步等待时间

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐