如果我在DART中有Stream,我可以同时使用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);

有什么区别吗?

推荐答案

Stream上的forEach函数将在出现第一个错误时停止,它不会给您StreamSubscription来控制如何监听流.如果您需要的话,使用forEach是很棒的-它会告诉您完成的时间(返回的Future),您所要做的就是处理事件.如果您需要更多的控制,您可以使用listen调用,这就是forEach的实现方式.

这就像Iterable.forEachIterable.iterator之间的区别——前者只调用每个元素的回调,而另一个为您提供了一种控制迭代的方法.

Dart相关问答推荐

异类列表中函数类型不变性的解决方法

如何在 Dart 中实现继承?

AppLifcycleState.didChangeLifecycleState( ) 函数在应用程序进入前台或后台时不被调用

在Flutter中实现像Chanel app一样的自定义滚动?

'T'、'f'、'E'、'e'、'→' 在 dart/flutter 文档中代表什么?

Flutter:[cloud_firestore/unknown] NoSuchMethodError:null 上的无效成员:'includeMetadataChanges'(Flutter Web)

如何go 除字符串中的变音符号?

如何创建一个对话框,能够接受文本输入并在Flutter中显示结果?

如何在Flatter中的屏幕中心创建选项卡栏?

如何在没有脚手架的情况下显示snackBar

Dart 有 int.INFINITY 吗?

如何从 JavaScript 调用 Dart 函数

您可以将命名参数与简写构造函数参数结合起来吗?

Dart - 如何在每次测试之后或之前运行函数?

Dart:将map转换为查询字符串

带范围的dartswitch

学习 Dart 好还是我必须使用基本的 javascript?

使用 Dart 将 Uint8List 转换为字符串

你如何在 Dart 中创建一个 Stream?

Dart 中的 urlencoding