Подтвердить что ты не робот

ENOENT из fs.createReadStream неуловимо?

Я не могу поймать ENOENT из fs.createReadStream(). Является ли это асинхронной функцией, которая выдает исключение в другой замыкающей цепочке?

$ node -v
v0.10.9
$ cat a.js
fs = require('fs')

try  {
  x = fs.createReadStream('foo');
} catch (e) {
  console.log("Caught" );
}

$ node a.js

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: ENOENT, open 'foo'

Я ожидаю, что "Caught" будет напечатан, а не стек ошибок!

4b9b3361

Ответ 1

fs.createReadStream является асинхронным с стилем эмиттера событий и не генерирует исключений (что имеет смысл только для синхронного кода). Вместо этого он выдает событие ошибки.

var fs = require('fs')

var stream = fs.createReadStream('foo');
stream.on('error', function (error) {console.log("Caught", error);});
stream.on('readable', function () {stream.read();});