Ссылаясь на node/readline
линии 313:
Interface.prototype.write = function(d, key) {
if (this.paused) this.resume();
this.terminal ? this._ttyWrite(d, key) : this._normalWrite(d);
};
по телефону rl.write()
вы либо написать TTY или вызвать _normalWrite()
, определение которого следует блок.
Interface.prototype._normalWrite = function(b) {
// some code
// .......
if (newPartContainsEnding) {
this._sawReturn = /\r$/.test(string);
// got one or more newlines; process into "line" events
var lines = string.split(lineEnding);
// either '' or (concievably) the unfinished portion of the next line
string = lines.pop();
this._line_buffer = string;
lines.forEach(function(line) {
this._onLine(line);
}, this);
} else if (string) {
// no newlines this time, save what we have for next time
this._line_buffer = string;
}
};
Выход написан в _line_buffer
.
линия 96:
function onend() {
if (util.isString(self._line_buffer) && self._line_buffer.length > 0) {
self.emit('line', self._line_buffer);
}
self.close();
}
Мы находим, _line_buffer
излучается line
события в конечном счете. Вот почему вы не можете писать вывод в writeStream. Чтобы решить эту проблему, вы можете просто открыть файл, используя fs.openSync()
, и fs.write()
в rl.on('line', function(line){})
callback.
Пример кода:
var rl = readline.createInterface({
input: fs.createReadStream(temp + '/export.json'),
output: process.stdout,
terminal: false
});
fd = fs.openSync('filename', 'w');
rl.on('line', function(line) {
fs.write(fd, line);
});
Большое спасибо :) – noone