学习节点流管理器highland.js的绳索。
尝试做一些非常基本的事情:
_ = require("highland")
doubled = (x)->
return x*2
_.map(doubled, [1, 2, 3, 4])
并且没有输出
当我改为运行时
_ = require("highland")
doubled = (x)->
return x*2
console.log(_.map(doubled, [1, 2, 3, 4]))
我得到以下输出:
{ domain: null,
_events: { newListener: [Function], removeListener: [Function] },
_maxListeners: 10,
id: '200471',
paused: true,
_incoming: [],
_outgoing: [],
_consumers: [],
_observers: [],
_send_events: false,
_send: [Function],
source:
{ domain: null,
_events: { newListener: [Function], removeListener: [Function] },
_maxListeners: 10,
id: '060326',
paused: true,
_incoming: [ 1, 2, 3, 4, {} ],
_outgoing: [],
_consumers: [ [Circular] ],
_observers: [],
_send_events: false } }
在我看来就像一个没有任何内容的流。
我在这里做错了什么?
答案 0 :(得分:4)
map
将一个流转换为另一个流。您需要使用reduce
或each
或toArray
之类的内容来收集结果。
也可以暂停流,在这种情况下,只有resume
它才会产生任何输出。
答案 1 :(得分:1)
以下是我如何处理它:
_ = require("highland")
doubled = (x)->
return x*2
_([1, 2, 3, 4]).map(doubled).map(String).pipe(process.stdout)
答案 2 :(得分:0)
我自己还在学习Highland.js,但文档说流是lazily-evaluated,所以在调用 thunk 运算符之前它们不会启动,例如{{1 }},.each()
,.apply()
,.toArray()
或.pipe()
- 它们都标记为“此函数会导致 thunk ”。在文档中。
你可能想做点什么(道歉,如果这没有意义,我不知道CoffeeScript)
.resume()
在回调函数中(在_ = require("highland")
doubled = (x)->
return x*2
_.map(doubled, [1, 2, 3, 4]).toArray((array) -> /* Array is available here */ )
),数组传入的值加倍,就像在the main example中一样。