2016-09-23 13 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(要求)'が何をしているかを教えてください。しかし、一般的には、 'async.series'の上の行にあるようにリクエストを' console.log'することを期待しているなら、もちろん非同期のようにブロックしない空の原因ストリームを返すでしょう。 – shriek

+0

これはasync.js(https://caolan.github.io/async/docs.html#.series)ライブラリ – user1513388

+0

です。だからあなたが直面している問題とは無関係です。おそらく約束を作成したり、ストリームのコールバックを渡して 'requests'をポピュレートしてから' console.log'を出したり、 'async.series'を実行したりする必要があります。 – shriek

答えて

1

ちょうどhighland'sドキュメントをお読みください。ストリームに.doneを追加し、requestsconsole.logに追加してみてください。

_(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); 
}) 
関連する問題