highland.js:map函数没有按预期工作

时间:2014-03-05 09:15:21

标签: javascript node.js stream highland.js

学习节点流管理器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 } }

在我看来就像一个没有任何内容的流。

我在这里做错了什么?

3 个答案:

答案 0 :(得分:4)

map将一个流转换为另一个流。您需要使用reduceeachtoArray之类的内容来收集结果。

也可以暂停流,在这种情况下,只有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中一样。