2016-04-16 6 views
0

私はreadlineモジュールを使ってNodeJsのテキストファイルを読み込みます。NodeJsはreadlineモジュールの速度を設定します

var lineReader = require('readline').createInterface({ 
    input: require('fs').createReadStream('log.txt') 
}); 
lineReader.on('line', function (line) { 
    console.log(line); 
}); 
lineReader.on('close', function() { 
    console.log('Finished!'); 
}); 

読み取りの時間を設定する方法はありますか? たとえば、私は5msごとに各行を読みたいと思います。

答えて

0

行を読むとすぐにリーダーストリームを一時停止することができます。その後、5ms後に再開します。ファイルの最後までこれを繰り返します。 highWaterMarkオプションを低い値に調整して、ファイルリーダーストリームが複数の行を同時に読み取らないようにしてください。

var lineReader = require('readline').createInterface({ 
    input: require('fs').createReadStream('./log.txt',{ 
    highWaterMark : 10 
    }) 
}); 

lineReader.on('line', line => { 
    lineReader.pause(); // pause reader 
    // Resume 5ms later 
    setTimeout(()=>{ 
    lineReader.resume(); 
    }, 5) 
    console.log(line); 
}); 
0

これを行うには、オブザーバブルを使用できます。ここでは、ファイルラインイベントの代わりにクリックイベントを使用したいと思う種類のバッファリングの例を示します。しかしのsetIntervalを回避し、それを行うためのクリーンな方法があるかどうかわからないという....

let i = 0; 
const source = Rx.Observable 
    .fromEvent(document.querySelector('#container'), 'click') 
    .controlled(); 

var subscription = 
    source.subscribe(() => console.log('was clicked ' + i++)); 

setInterval(() => source.request(1), 500); 

はここでフィドルともRXのためのドキュメントへのリンクです:

https://jsfiddle.net/w6ewg175/

https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/controlled.md

関連する問題