flutter - Flutter:如何对多个流进行排队
问题描述
我有像下面提到的代码一样的流,这里想合并流,并想在需要时一一调用。
main() {
Stream<String> stream = new Stream.fromFuture(getData());
stream.listen((data) {
print("DataReceived: "+data);
}, onDone: () {
print("Task Done");
});
}
Future<String> getData() async {
await Future.delayed(Duration(seconds: 5)); //Mock delay
print("Fetched Data");
return "This a test data";
}
onDone
将在 5 秒后调用。
解决方案
对于它,StreamQueue
可用于组合多个流
添加依赖:
async: ^2.4.1
使用流队列:
void main() async {
Stream<String> stream1 = new Stream.fromFuture(getData(2));
Stream<String> stream2 = new Stream.fromFuture(getData(4));
Stream<String> stream3 = new Stream.fromFuture(getData(6));
var streams = StreamGroup.merge([stream1, stream2, stream3]);
var data = StreamQueue(streams);
var first = await data.next;
print(first);
var second = await data.next;
print(second);
var third = await data.next;
print(third);
var third1 = await data.next;
print(third1);
}
Future<String> getData(int duration) async {
await Future.delayed(Duration(seconds: duration)); //Mock delay
return "This a test data for duration $duration";
}
输出:
I/flutter ( 7950): This a test data for duration 2
I/flutter ( 7950): This a test data for duration 4
I/flutter ( 7950): This a test data for duration 6
data.next
将为您提供 Queue 中的第一个流,在我们的例子中是 stream1,在这里我们可以获取未来的值并使用。stream.next
如果队列中不存在任何内容,则给出队列中的下一个流& stream.next 被执行,那么它将引发异常。
推荐阅读
- javascript - 带有 Nodemailer 的 HTML2PDF
- java - UTF-8 字符 html 内容字符串到 pdf
- google-apps-script - 我可以使用谷歌应用脚本来开发谷歌浏览器扩展吗
- asp.net-mvc - 任何 .net 应用程序的 IIS 应用程序池崩溃 - PipelineModuleStepContainer 中的 NullReferenceException
- c++-cli - 如何在datagridview中合并单元格,然后将组合框添加到单元格被合并?
- mysql - 如何使用 SQL 在 MS 查询表中仅显示一个最大值(不是一组最大值)?
- java - 理解构造函数的问题,如 ArrayList.class 中的构造函数
- c# - 显示带有部分视图的多个表。ASP.NET MVC
- python - 用于在 python 中训练 ML 模型的导入配置文件
- vue.js - 在 80 端口的 VPS 中运行 vue