javascript – 如何破坏高地流

我有以下例子

const input = _();
const output = _()
  .each(x => console.log('out', x));

input
  .pipe(output);

input.write(1)
output.destroy();
input.write(2); 

据我所知,在文件(http://highlandjs.org/#destroy)中,摧毁流应清理破碎的管道.
而我得到以下错误:

out 1
out 2
node_modules/highland/lib/index.js:1114
        throw new Error('Can not call next after nil');
        ^

Error: Can not call next after nil

有人有什么洞察为什么会发生,什么正确的方式来摧毁流?

从阅读文档,看起来像This是你的错误的答案.该流让程序的其余部分知道它已经结束的方式是将“nil”作为流中的下一个数据传递.查看该链接的示例代码,由您决定流已经结束并相应地执行.

这就是为什么你得到错误 – 你的管道试图继续下一个数据,但是抛出一个错误,因为没有像“nil”之后的这样的事情.

对于销毁流的正确方法,我认为你使用的方式是正确的方法(我不熟悉highland.js,所以这只是基于阅读文档和熟悉javascript)只是效果不一定是您期待的.我不会期望破坏输出来销毁管道,这是因为管道“属于”输入,因为它被称为反对.如果你想破坏你的管道,我可以想象,这样做的方法就是打电话

input.destroy()

相反(或者确实,以及output.destroy(),因为你不想离开松散的结尾!).文档规定您应该在任何手动构建的流中调用destroy()或.end()(如上所述).

这样想一想.如果我有一个来源是管道到目的地,我删除那个目的地,当然我会得到一个错误,因为我的输入无处可去,我的输出流将会告诉所有其他的东西结束了.如果要破坏管道,销毁源代码更有意义,如果您停止输出/目的地,则需要在其他地方找到您的输入!

翻译自:https://stackoverflow.com/questions/32692650/how-to-destroy-a-highland-stream

转载注明原文:javascript – 如何破坏高地流