来自fs.createReadStream的ENOENT无法访问?

vrd*_*dhn 36 node.js

我无法捕捉到fs.createReadStream()的ENOENT.这是一个异步函数,它在不同的闭包链中抛出异常吗?

$ 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'
Run Code Online (Sandbox Code Playgroud)

我期待'抓住'打印而不是错误堆栈!

Pet*_*ons 50

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();});
Run Code Online (Sandbox Code Playgroud)

  • 我想你是说同步返回了流对象,但是它的文件打开与事件发射异步发生.在`stream.on('error',...)`生效之前,是否有可能发出错误事件?如果我一次在节点的REPL中输入一行,那就是我所看到的. (3认同)
  • 是的,您可以放心,当前的勾号将在任何事件发生之前完成.所以只要你立即绑定你的处理程序,一切都很好. (3认同)