2014-03-05 69 views
2

學習節點流管理器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 } } 

WHI ch在我看來就像一個沒有任何內容的流。

我在這裏做錯了什麼?

回答

4

map將一個流變成另一個流。您需要使用類似reduceeachtoArray來收集結果。

流也可能被暫停,在這種情況下,它將不會產生任何輸出,直到您resume它。

0

仍在學習Highland.js自己,但該文檔說,流是lazily-evaluated,所以他們沒有啓動,直到 ING運營商被調用,如.each().apply().toArray().pipe(),或者.resume() - 他們都標記爲「此功能導致thunk」。在文檔中。

你可能想這樣做(道歉,如果這沒有任何意義,我不知道的CoffeeScript)

_ = require("highland") 

doubled = (x)-> 
    return x*2 

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

在回調函數(在/*Array is available here*/),陣列中傳遞加倍的價值,就像他們在the main example中所做的那樣。

1

這是我會怎麼處理它:

_ = require("highland") 
 

 
doubled = (x)-> 
 
    return x*2 
 

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