Node.js: console.err () является синхронным или асинхронным? - PullRequest
0 голосов
/ 02 апреля 2020

Я использую AWS и хочу записать все ошибки в stderr, используя console.err(). stderr перехватывается AWS Cloud Watch и регистрируется. Я не хочу блокировать событие l oop.

Является ли console.err() в Node.js реализации асинхронным?

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Это зависит от операционной системы и от того, куда stderr «идет».

С документация Node.js :

process.stdout и process.stderr отличаются от других потоков Node.js важными способами:

  1. Они используются внутри console.log() и console.error() соответственно.

  2. Запись может быть синхронной, в зависимости от того, к какому потоку подключен и используется ли система Windows или POSIX:

    • Файлы: синхронны на Windows и POSIX
    • TTY (терминалы): асинхронный на Windows, синхронный на POSIX
    • Трубы (и сокеты): синхронный на Windows, асинхронный на POSIX
1 голос
/ 02 апреля 2020

В образовательных целях я собираюсь продемонстрировать, как это проверить, чтобы вам не нужно было спрашивать в следующий раз. Вот как вы проверяете, является ли код асин c в большинстве случаев c:

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

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

Так что, если вы запустите его, вы увидите, что сначала он печатает «End», а затем - «Asyn c закончен», потому что setTimeout асинхронный.

Итак, я добавлю новый отрубленный для вашего случая, чтобы вы знали.

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

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

Запустите его, и вы увидите. Вы также можете попробовать это в среде Node, результат будет таким же.

И слушайте @ jonas-wilms, он прав, Ведение журнала довольно быстрое

...