我只是使用Node.js创建一些同步日志记录。
我认为console.log是同步的,但我希望使用process.stdout,一个可写的流。
这是我到目前为止所做的:
var messages = [];
var okToWrite = true;
process.stdout.on('finish', function () {
okToWrite = true;
if (messages.length > 0) {
runnerLog(messages.pop());
}
});
module.exports = function runnerLog(data) {
if (okToWrite) {
okToWrite = false;
process.stdout.write(data);
process.stdout.end();
}
else {
messages.push(data);
}
};
问题是终止事件永远不会被触发,我也试着听取排水事件,但这似乎也没有被解雇。调用process.stdout.end()
似乎只会导致问题。我应该致电process.stdout.flush()?
我不确定是否需要同步日志记录,但无论哪种方式,此代码都不会锁定事件循环,因为我正在使用异步I / O而不是等待任何事情等等。它都是偶然的。< / p>
从Node.js进程的文档中,看起来调用end()将抛出并完成永远不会被调用:
https://nodejs.org/api/process.html#process_process_stdout
所以也许我应该使用除process.stdout之外的其他可写流并将其传递给process.stdout?不知道。
答案 0 :(得分:0)
似乎process.stdout.write,至少在指向终端/控制台时已经是同步的。似乎没有必要添加任何东西。此外,如我的问题所述,process.stdout流似乎不会触发使我的原始设计进行同步记录所需的事件。