Dart 流中的 listen 和 forEach 有什么区别?

Posted Lucklyの博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dart 流中的 listen 和 forEach 有什么区别?相关的知识,希望对你有一定的参考价值。

stream - Dart 流中的 listen 和 forEach 有什么区别?

如果我有 Stream在 Dart 中,我可以同时使用 listenforEach ,但我不明白其中的区别。

因此,例如考虑以下代码:

final process = await Process.start('pub', ['serve']);
process.stdout.map((l) => UTF8.decode(l)).forEach(print);

我也可以写:

process.stdout.map((l) => UTF8.decode(l)).listen(print);

有什么区别吗?

最佳答案

forEach Stream 上的函数将在第一个错误处停止,并且不会给您 StreamSubscription控制您在流上收听的方式。使用 forEach如果这是您想要的,那就太好了 - 它会告诉您何时完成(返回的 Future )并且您所要做的就是处理事件。如果您需要更多控制,可以使用 listen打电话是怎么回事forEach被执行。

这就像Iterable.forEach之间的区别和 Iterable.iterator - 前者只是为每个元素调用一个回调,另一个给你一种控制迭代的方法。

以上是关于Dart 流中的 listen 和 forEach 有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章

如何比较流中的每个事件,streamController dart

关于java stream流中的peek方法和foreach的自我理解:

Dart:让流中抛出的异常传播并在调用者中捕获它

7.Dart中的函数 箭头函数 匿名函数 闭包

在 Dart / Flutter 的 Firestore 查询中添加限制时,不会调用 Stream Listen

Dart - 是不是可以更改 future.forEach。到地图?