2

学习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 } }

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

我在这里做错了什么?

4

3 回答 3

4

map将一个流变成另一个流。您需要使用类似reduceoreach的东西toArray来收集结果。

流也有可能被暂停,在这种情况下,它不会产生任何输出,直到你resume这样做。

于 2014-03-06T02:07:37.587 回答
1

这是我将如何处理它:

_ = require("highland")

doubled = (x)->
    return x*2

_([1, 2, 3, 4]).map(doubled).map(String).pipe(process.stdout)

于 2015-01-10T04:55:53.513 回答
0

我自己还在学习 Highland.js,但文档说流是lazily-evaluated,所以它们直到调用一个thunk ing 操作符才开始,例如.each(), .apply(), .toArray(), .pipe(), 或.resume()- 它们都被标记为“这个函数导致一声 ” 在文档中。

您可能想做类似的事情(如果这没有意义,请道歉,我不知道 CoffeeScript)

_ = require("highland")

doubled = (x)->
    return x*2

_.map(doubled, [1, 2, 3, 4]).toArray((array) -> /* Array is available here */ )

在回调函数/*Array is available here*/

于 2014-12-17T23:46:22.597 回答