Comment émettre/pipe tableau de valeurs lisible flux dans node.js?

Quelle est la meilleure façon de créer une lisible flux à partir d'un tableau et le tuyau de valeurs à une écriture de flux? J'ai vu substack de exemple à l'aide de la méthode setInterval et je peux le mettre en œuvre avec succès à l'aide de 0 pour la valeur de l'intervalle, mais je suis de parcourir un grand nombre de données et le déclenchement de gc à chaque fois est de ralentir les choses.

//Working with the setInterval wrapper
var arr = [1, 5, 3, 6, 8, 9];

function createStream () {
    var t = new stream;
    t.readable = true;
    var times = 0;
    var iv = setInterval(function () {
        t.emit('data', arr[times]);
        if (++times === arr.length) {
            t.emit('end');
            clearInterval(iv);
        }
    }
}, 0);

//Create the writable stream s
//....

createStream().pipe(s);

Ce que je voudrais faire est d'émettre des valeurs sans la fonction setInterval. Peut-être à l'aide de la async module comme ceci:

async.forEachSeries(arr, function(item, cb) {
    t.emit('data', item);
    cb();
}, function(err) {
 if (err) {
     console.log(err);
 }
 t.emit('end');
});

Dans ce cas, je itérer le tableau et émettent des données, mais jamais de tuyau de toutes les valeurs. J'ai déjà vu shinout de ArrayStream, mais je pense qu'a été créé avant v0.10 et il est un peu plus de frais généraux que je suis à la recherche d'.

  • Je ne pense pas que vous serez en mesure d'obtenir beaucoup moins de frais généraux que ArrayStream (110 sloc). async va être similaire à substack de l'exemple dans l'utilisation de setImmediate. Je ne pense pas que vous avez besoin setImmediate/setInterval pour toutes les données de l'événement puisque vous ne faites pas d'IO, mais vous aurez besoin pour gérer pause/reprise qui ArrayStream fait pour vous. Curieux de voir ce que les réponses que vous obtenez.
  • Merci pour l'entrée. Je suppose que mon plus gros souci avec ArrayStream était qu'il n'avait pas été mis à jour depuis les changements dans le Flux de l'API dans v0.10, mais ces inquiétudes pourraient être infondées. J'ai été surpris qu'elle avait si peu de téléchargements ce qui me fait croire que d'autres font les choses différemment.
InformationsquelleAutor TankofVines | 2013-05-31