2016-09-23 1 views
2

J'ai des problèmes avec highland.js. Je dois créer un tableau de fonctions à partir de mes données de flux, mais je n'arrive pas à le faire fonctionner. Voici mon code, cependant requests est toujours vide.streaming à partir de fichiers volumineux et la création d'un tableau

var requests = [];   
_(fs.createReadStream("small.txt", { encoding: 'utf8' })) 
     .splitBy('-----BEGIN-----\n') 
     .splitBy('\n-----END-----\n') 
     .filter(chunk => chunk !== '') 
     .each(function (x) { 

      requests.push(function (next) { 
       Helpers.Authenticate() 
        .then(function (response1) { 
         return Helpers.Retrieve(); 
        }) 
        .then(function (response2) { 
         return Helpers.Retrieve(); 
        }) 
        .then(function() { 
         next(); 
        }); 
      }); 

     }); 
     console.log(requests) 
     async.series(requests); 
+0

Je viens de relire votre question. Vous nous dites ce que 'async.series (requests)' fait? Mais en général, si vous vous attendez à 'console.log' les demandes comme vu sur la ligne au-dessus de' async.series' alors bien sûr ça va retourner les flux de causes vides ne bloquent pas comme async. – shriek

+0

Ceci est async.js (https://caolan.github.io/async/docs.html#.series) bibliothèque – user1513388

+0

Je vois. Donc, cela n'a rien à voir avec le problème auquel vous êtes confronté. Vous avez probablement besoin de créer une promesse ou de passer un rappel pour que le flux finisse de remplir 'requests', puis' console.log' ou d'exécuter 'async.series'. – shriek

Répondre

1

Il suffit de lire highland's doc. Essayez d'ajouter .done à votre flux et console.log sur le requests.

_(fs.createReadStream("small.txt", { encoding: 'utf8' })) 
    .splitBy('-----BEGIN-----\n') 
    .splitBy('\n-----END-----\n') 
    .filter(chunk => chunk !== '') 
    .each(function (x) { 

     requests.push(function (next) { 
      Helpers.Authenticate() 
       .then(function (response1) { 
        return Helpers.Retrieve(); 
       }) 
       .then(function (response2) { 
        return Helpers.Retrieve(); 
       }) 
       .then(function() { 
        next(); 
       }); 
     }); 

    }).done(function(){ 
     console.log(requests); 
    }); 
+0

Wow - merci. Travaillé comme un charme. Je me suis arraché les cheveux en essayant de le régler. – user1513388

0

Je voudrais simplement utiliser les événements de flux à des choses câbler:

var stream = fs.createReadStream('small.txt', {encoding: "utf8"}); 

stream.on('data', (line) => { 
    var lineStr = line.toString(); //Buffer to String 
    /* You code here */ 
}) 

stream.on('close', (line) => { 
    console.log(request); 
})