2016-09-23 12 views
2

У меня проблемы с highland.js. Мне нужно создать массив функций из моих данных потока, но не могу заставить его работать. Вот мой код, однако requests всегда пуст.потоковая передача из больших файлов и создание массива

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

Я просто перечитываю ваш вопрос. Разум говорит нам, что делает 'async.series (request)'? Но в целом, если вы ожидаете «console.log» запросов, как видно на строке выше «async.series», тогда, конечно, он вернет пустые потоки причин, которые не блокируются так же, как async. – shriek

+0

Это isync.js (https://caolan.github.io/async/docs.html#.series) библиотека – user1513388

+0

Я вижу. Так что это не связано с проблемой, с которой вы сталкиваетесь. Вероятно, вам нужно создать обещание или передать обратный вызов для потока, чтобы завершить заполнение 'запросов', а затем' console.log' или выполнить 'async.series' на нем. – shriek

ответ

1

Просто читать highland's док. Попробуйте добавить .done в свой поток и console.logrequests.

_(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

Вау - спасибо. Работал как шарм. Я рвал мои волосы, пытаясь разобраться. – user1513388

0

Я бы просто использовать поток событий телеграфировать вещи:

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); 
}) 

 Смежные вопросы

  • Нет связанных вопросов^_^