我想Future.wait()在一些网络调用上运行,以便它们可以同时运行。我想进一步加快速度,在结果可用时返回结果,以便我可以开始显示它们。我认为只需对调用进行一个小修改Future.wait就可以了,但不幸的是,它在内部使用私有类。有更好的方法来实现这一点吗?
您可以使用Stream.fromFutures 构造函数
流按照 future 完成的顺序在流上报告 future 的结果。每个 future 都提供数据事件或错误事件,具体取决于 future 的完成方式。
如果在调用 Stream.fromFutures 时某些 future 已经完成,它们的结果将以某种未指定的顺序发出。
当所有 future 完成后,流将关闭。
Stream<int> streamingInts = Stream.fromFutures([
Future.delayed(Duration(seconds: 1), () => 1),
Future.delayed(Duration(seconds: 2), () => 2),
]);
await for (final i in streamingInts) {
print(i);
}
Run Code Online (Sandbox Code Playgroud)
我的真实用例 - 表明加载需要比预期更多的时间
Stream<BlocState> loadingStates = Stream.fromFutures([
Future.delayed(_kTooSlowDelay, () => LoadingTakesTooLongState()),
_loadData(),
]);
await for (var state in loadingStates) {
yield state;
if (state is LoadedState) break;
}
Future<LoadedState> _loadData() ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
440 次 |
| 最近记录: |