Node.js:console.err()是同步还是异步?

时间:2020-04-02 09:04:02

标签: javascript node.js event-loop

我使用AWS,并且我想使用stderr将所有错误写入console.err()stderr AWS Cloud Watch 捕获并记录。我不想阻止事件循环。

Node.js实现中的console.err()是否异步?

2 个答案:

答案 0 :(得分:1)

出于教育目的,我将演示如何检查它,以便您下次无需询问。 这是在最基本的情况下测试代码是否异步的方法:

const asyncOperation = async () => {
	await new Promise( (res) => setTimeout(res, 1000))
	console.log("Async finished")
}

console.log("Start")
asyncOperation()
console.log("End")

因此,如果运行它,则将看到它先打印“ End”,然后再打印“ Async done”,因为setTimeout是异步的。

因此,我将为您的案例添加新的摘要,

const asyncOperation = () => {
  console.error("Async Err?")
}

console.log("Start")
asyncOperation()
console.log("End")

运行它,您会看到。您也可以在Node环境中尝试一下,结果将是相同的。

听@ jonas-wilms他是对的,日志记录非常快

答案 1 :(得分:1)

这取决于操作系统以及stderr所处的位置。

来自the Node.js documentation

process.stdoutprocess.stderr在重要方面与其他Node.js流不同:

  1. 它们分别由console.log()console.error()内部使用。

  2. 写入可能是同步的,具体取决于流连接到的对象以及系统是Windows还是POSIX:

    • 文件:在Windows和POSIX上同步
    • TTY(终端):在Windows上异步,在POSIX上同步
    • 管道(和套接字):在Windows上同步,在POSIX上异步