2016-04-01 5 views
0

Ich versuche, die folgenden Schnipsel zu erhalten, um die gleiche Ausgabe - ein Strom von Array-Werte.highland.js Async-Array zu Datenstrom

Die erste Methode startet von einem Array und gibt die Werte aus.

Die zweite Methode erhält als Eingabe eine Verheißung, die ein Array auflöst. Anstatt also alle Werte zu übergeben, wird nur das Array selbst ausgegeben.

Was sollte ich in der zweiten Methode ändern, damit es die gleiche Ausgabe wie die erste ausgibt?

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

Sie verwenden die jeweils im ersten Fall, nicht in den zweiten. – Shanoor

Antwort

2

In beiden Fällen müssen Sie nicht done aufzurufen, da each verbraucht bereits Stream.

Der Fall mit Versprechen wird den aufgelösten Wert (d. H. Ein Array von Zahlen) den Stream weiterleiten. Sie können die Methode series verwenden, um jedes Array in diesem Stream in einen eigenen Stream umzuwandeln und die Streams anschließend zu verketten. In diesem Beispiel ist es ein wenig kontraintuitiv, da es nur ein Array gibt und somit nur ein Stream verkettet werden kann. Aber das ist was du willst - ein Strom von Zahlen. Hier

ist der Code:

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 
Verwandte Themen