Mic*_*nor 8 node.js highland.js
我只是在受到NoFlo.js的启发后学习了highland.js.我希望能够以递归方式运行流.在这个设计的例子中,我将提供一个乘以2的数字,我们过滤结果<= 512.一旦数字相乘,它就会被反馈到系统中.我的代码有效,但如果我在管道中取出doto函数,它不会处理任何数字.我怀疑我正在将数据错误地发送回returnPipe.有没有更好的方法将数据传回系统?我错过了什么?
###
input>--m--->multiplyBy2>---+
| |
| |
+---<returnPipe<----+
###
H = require('highland')
input = H([1])
returnPipe = H.pipeline(
H.doto((v)->console.log(v))
)
H.merge([input,returnPipe])
.map((v)-> return v * 2)
.filter((v)-> return v <= 512)
.pipe(returnPipe)
Run Code Online (Sandbox Code Playgroud)
从文档中:doto在重新发出源流的同时旋转流.这意味着就管道而言,有一个函数仍在通过它传递流.如果doto取出,原始流不会在下一次迭代时通过返回流返回.
如果要使用管道,则必须向其传递一个获取流并发出流的方法.例如,您可以doto使用类似于H.map((v)=>{console.log(v); return v;})调用的方式替换方法,H.pipeline因为该方法使用流并发出流,所以当流传递回流时,它将继续流动.pipe(returnPipe)
编辑:要回答您的问题,当您声明let input = H([1])实际上正在创建流时.您可以删除对管道和returnPipe的任何引用,并使用以下代码生成相同的输出:
let input = H([1]);
input.map((v)=> {
return v * 2;
})
.filter((v)=> {
if (v <= 512) {
console.log(v);
}
return v <= 512;
})
.pipe(input);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
262 次 |
| 最近记录: |