跳到主要内容
CNode

setTimeout 报错导致整个进程退出, 是正常行为吗

问答
Jjiyinyiyong发布于 9 年前最后回复 9 年前
348400

在浏览器环境习惯了, 记不起来 Node.js 以前是不是这样. 我的想法是把一些逻辑放在 setTimeout 的事件队列当中执行, 这样代码报错了, 主进程不受到影响, 而报错是直接打印在 Console 里的. 可是实际测试了一下, setTimeout 当中代码报错, 整个 Node.js 进程直接退出了. 除了 try/catch 还有没有方式可以在 Node.js 当中模拟浏览器的行为? Node.js 当中一开始就这样吗?

示例代码:

var http = require('http');

http.createServer(function(req, res) {
  return a(2);
}).listen(3000);
查看回复

回复 (3)

H
hyj1991#19 年前

问题在于 setTimeout 里面设置的回调也是在主线程中被调用的啊,挂了并且没有进行异常捕获当然会让整个进程退出了

L
liuqipeng417#29 年前

个人猜测: 1、settimeout 会把回调放到 micro queue 里,主进程是不断地从不同 queue 里取出回调执行,因此无论是哪类事件队列,出错都是被主进程抓到,浏览器也是 2、node 和 浏览器两者的应用场景决定了对于 settimeout 报错行为处理方式的不同,node 里是直接抛出,而浏览器里应该是主动抓住并抛出

如果要模拟浏览器的话: process.on('uncaughtException', (e) => { console.error(e) })

参与回复

登录后即可参与回复。登录