Рассмотрим приведенный ниже код ... Я пытаюсь, чтобы приостановить поток после прочтения первых 5 строк:Приостановка Readline в Node.js
var fs = require('fs');
var readline = require('readline');
var stream = require('stream');
var numlines = 0;
var instream = fs.createReadStream("myfile.json");
var outstream = new stream;
var readStream = readline.createInterface(instream, outstream);
readStream.on('line', function(line){
numlines++;
console.log("Read " + numlines + " lines");
if (numlines >= 5) {
console.log("Pausing stream");
readStream.pause();
}
});
Выход (скопированный рядом) предполагает, что он держит чтения строки после пауза. Возможно, readline поставил в очередь еще несколько строк в буфере и все равно кормит их мне ... это имеет смысл, если он будет продолжать читать асинхронно в фоновом режиме, но на основе документации я не знаю, что должно быть надлежащее поведение. Любые рекомендации о том, как добиться желаемого эффекта?
Read 1 lines
Read 2 lines
Read 3 lines
Read 4 lines
Read 5 lines
Pausing stream
Read 6 lines
Pausing stream
Read 7 lines
Спасибо за этот ответ. Из интереса, насколько распространено такое требование? Я разбираю CSV на 80 ГБ, который нужно передавать на сервер. какие другие варианты использования? –
@ZachSmith Я обнаружил, что возможность приостановки и возобновления во время очень полезна, когда обратный вызов не может или не должен выполняться синхронно (скажем, вставляя строки в базу данных).Если вы читаете строки быстрее, чем можете их обработать, вы можете поставить слишком много запросов и исчерпать память. –