2016-04-01 36 views
0

我想要得到以下代碼片段來返回相同的輸出 - 數組值的流。highland.js異步數組到數據流

第一種方法從數組開始併發出值。

第二種方法獲取解析數組的promise,所以不是發射每個值,而只是發出數組本身。

我應該改變第二種方法,使其輸出與第一種相同的東西?

const h = require('highland'); 

var getAsync = function() { 
    return new Promise((resolve, reject) => { 
    resolve([1,2,3,4,5]); 
    }); 
} 

h([1,2,3,4,5]) 
    .each(console.log) 
    .tap(x => console.log('>>', x)) 
    .done(); 
//outputs 5 values, 1,2,3,4,5 


h(getAsync()) 
    .tap(x => console.log('>>', x)) 
    .done(); 
//outputs >>[1,2,3,4,5] 
+1

您在第一種情況下使用的每個,而不是在第二個。 – Shanoor

回答

2

在你不需要調用done這兩種情況下,因爲each已經消耗你流。

承諾的情況會將解析後的值(即數字數組)傳遞到流中。您可以使用series方法將此數據流中的每個數組轉換爲它自己的數據流,然後連接數據流。在這個例子中有點違反直覺,因爲只有一個數組,因此只有一個數據流被連接起來。但這就是你想要的 - 一串數字。

下面是代碼:

const h = require('highland'); 

var getAsync = function() { 
    return new Promise((resolve, reject) => { 
    resolve([1,2,3,4,5]); 
    }); 
} 

h([1,2,3,4,5])      // stream of five numbers 
    .each(console.log)    // consumption 

h(getAsync())      // stream of one array 
    .series()       // stream of five numbers 
    .each(x => console.log('>>', x)) // consumption