javascript - 如何摧毁高地溪流

标签 javascript highland.js

我有下面的例子

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一般),只是效果不一定是您所期望的。我不希望破坏 output 来破坏管道,这是因为管道“属于”input,因为它是针对它调用的。如果你想破坏你的管道,我想解决它的方法是调用

input.destroy()

取而代之(或者实际上,以及 output.destroy(),因为你不想留下未完待续的结局!)。文档指出您应该在任何手动构造的流上调用 destroy() 或 .end()(就像上面那样)。

这样想。如果我有一个源管道到一个目的地,我删除了那个目的地,我当然会得到一个错误,因为我的输入无处可去,而我的输出流将告诉其他一切它结束了。如果你想销毁管道,那么销毁源头更有意义,如果你停止输出/目的地,你需要找到其他地方让你的输入去!

关于javascript - 如何摧毁高地溪流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32692650/

相关文章:

javascript - 无法使用streams/highland.js从结果中从mongodb获取数据

javascript - ASP.NET MVC : Trying to store image url in js variable using razor syntax

node.js - highlandjs中的循环数据流

javascript - 高地.js : wrap toCallback into promise

javascript - Highland.js 中的上下文

javascript - 如何将高地流转为节点可读流?

javascript - 调整大小后删除事件监听器

javascript - sequelize 定义关联时出现错误

javascript将对象方法传递给不同的对象方法

javascript - 以循环顺序显示多个信息 JQuery - Flapper