我已阅读有关 Console 对象和 A note on process I/O 的文档,但无法确定以下是否会导致同步或异步操作:
const out = fs.createWriteStream('./out.log')
const logger = new Console(out)
logger.log('foo')
我很好奇它是如何起作用的,尤其是在 *Nix 系统上。但我不希望这在 Windows 上会有所不同。我问的原因是因为我构建了一个利用 Console 对象的记录器,但我不希望记录器在生产中将日志写入文件时被阻塞。
最佳答案
它将是异步。
Console
类内部维护一个回调 _stdoutErrorHandler
在写操作完成后触发并检查错误。我们可以使用它来测试异步性。
const fs = require('fs');
const { Console } = require('console');
const str = new Array(100).fill('').map(() => 'o'.repeat(1000 * 1000)).join('');
const out = fs.createWriteStream('./o.txt');
const logger = new Console(out);
logger._stdoutErrorHandler = () => { console.log('written');};
logger.log(str);
console.log('hey');
您会看到“嘿”在“书面”之前被打印出来。
The note on process I/O适用于 process.stdin
和 process.stdout
是特殊的流。当它们指向文件时,如下所示:
$ node someCode.js > file.txt
... 在 Unix 中,Unix 中的写操作将是同步的。这在 here 行中处理。 .在这种情况下,process.stdout
流将连接到文件,而不是通常的 unix 文件描述符 fd1
。
关于node.js - 如果将文件可写流传递给 Node.js 中的控制台构造函数,是异步写入吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45202306/