44

我无法捕捉 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'

我期待打印“Caught”而不是错误堆栈!

4

1 回答 1

54

fs.createReadStream与事件发射器样式异步并且不会抛出异常(仅对同步代码有意义)。相反,它会发出一个错误事件。

const fs = require('fs')

const stream = fs.createReadStream('foo');
stream.on('error', function (error) {console.log("Caught", error);});
stream.on('ready', function () {stream.read();});
于 2013-06-16T19:19:36.590 回答