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

Kas*_*per 6 stream dart

如果我Stream在飞镖,我可以同时使用listenforEach,但我不明白的区别.

例如,考虑以下代码:

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

我也可以写:

process.stdout.map((l) => UTF8.decode(l)).listen(print);
Run Code Online (Sandbox Code Playgroud)

有什么区别吗?

lrn*_*lrn 7

a上的forEach函数Stream将在第一个错误处停止,并且它不会让您StreamSubscription控制如何监听流.使用forEach是伟大的,如果这就是你想要的东西-它告诉你当它完成(返回Future),所有你需要做的是处理的事件.如果您需要更多控制权,可以使用实施方式的listen呼叫forEach.

这就像之间的差异Iterable.forEachIterable.iterator-前者只是调用每个元素的回调,对方给你一个方法来控制迭代.