node.js - 来自 fs.createReadStream 的 ENOENT 是不可捕获的吗?

标签 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'

我希望打印 'Caught' 而不是错误堆栈!

最佳答案

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();});

关于node.js - 来自 fs.createReadStream 的 ENOENT 是不可捕获的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17136536/

相关文章:

node.js Express - 如何异步获取部分 View

node.js - 在 Node Express 中包含自定义模块

javascript - 使用 React 将选项卡设置为事件状态

node.js - Heroku 上的 HTML5 应用程序

node.js - 在子文档数组中使用 mongoose $inc

javascript - 单个解析器/ promise 的多个生产者

javascript - 未捕获错误 : process. 不支持绑定(bind)(browserify+selenium-webdriver)

javascript - 如何通过Express JS服务器将React JS和Socket IO连接在一起?

node.js - eonasdan-bootstrap-datetimepicker v4.17.37 小部件未使用 common.js 加载

javascript - 为什么在声明这个javascript函数时参数中有大括号? ( Node ,model.js 中的 MongoDB)