防止Node.js中错误导致进程阻塞的办法


Posted in Javascript onAugust 11, 2016

前言

在Node.js中,当某个回调函数发生了错误,整个进程都会崩溃,影响后面的代码执行。

Node.js这样处理,是因为在发生未被捕获的错误时,进程的状态就不确定。之后也就无法正常工作了。如果错误始终不处理的话,就回一直抛出意料之外的错误,这样不利于调试。

防止错误导致的进程阻塞的方法主要有如下两种:

一. try-catch

try-catch允许进行异常捕获,并让代码继续执行下去:

例如:

当函数抛出错误时,代码就停止执行了:

(function() {
 var a = 0;
 a();
 console.log("get here."); // 不执行
})();

使用try-catch进行错误处理后,代码仍可继续执行:

(function() {
 var a = 0;
 try {
  a();
 } catch (e) {
  console.log(e);
 }
 console.log("get here."); // get here.
})();

try-catch不能捕获未来执行函数错误

要捕获未来才执行到的函数所抛出的错误时不可能的。这会直接抛出未捕获的异常,并且catch代码块永远都不会被执行:

try {
 setTimeout(function() {
  throw new Error("here");
 }, 10);
} catch(e) {
 console.log(e);
}

这就是为什么在Node.js中,每步豆芽正确进行错误处理的原因。

添加uncatchException处理器

若添加了 uncatchException 处理器,当函数抛出错误时,进程也不会退出。

process.on("uncatchException", function(e) {
 console.log(e);
 process.exit(1);
});

总结

以上就是防止Node.js中错误导致进程阻塞的办法的全部内容,希望对大家使用Node.js有所帮助。

Javascript 相关文章推荐
jquery 实现表单验证功能代码(简洁)
Jul 03 Javascript
JS等比例缩小图片尺寸的实例
Feb 27 Javascript
JS 有趣的eval优化输入验证实例代码
Sep 22 Javascript
基于jquery插件实现常见的幻灯片效果
Nov 01 Javascript
jquery实现手风琴效果实例代码
Nov 15 Javascript
js Calender控件使用详解
Jan 05 Javascript
JS获取网页图片name属性的方法
Apr 01 Javascript
BootStrap网页中代码显示用法详解
Oct 21 Javascript
underscore之Chaining_动力节点Java学院整理
Jul 10 Javascript
Node.js学习之TCP/IP数据通讯(实例讲解)
Oct 11 Javascript
vue中如何实现pdf文件预览的方法
Jul 12 Javascript
Vue.js递归组件实现组织架构树和选人功能
Jul 04 Javascript
JavaScript中 ES6 generator数据类型详解
Aug 11 #Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合
Aug 11 #Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
Aug 11 #Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
Aug 11 #Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
Aug 11 #Javascript
jQuery多个版本和其他js库冲突的解决方法
Aug 11 #Javascript
JS获取字符串实际长度(包含汉字)的简单方法
Aug 11 #Javascript
You might like
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
PHP扩展CURL的用法详解
2014/06/20 PHP
PHP防盗链代码实例
2014/08/27 PHP
laravel框架添加数据,显示数据,返回成功值的方法
2019/10/11 PHP
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
Javascript的时间戳和php的时间戳转换注意事项
2013/04/12 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
2013/11/18 Javascript
jQuery操作cookie方法实例教程
2014/11/25 Javascript
javascript日期处理函数,性能优化批处理
2015/09/06 Javascript
javascript跨域总结之window.name实现的跨域数据传输
2015/11/01 Javascript
深入理解关于javascript中apply()和call()方法的区别
2016/04/12 Javascript
jQuery简单入门示例之用户校验demo示例
2016/07/09 Javascript
Angular CLI 安装和使用教程
2017/09/13 Javascript
JS设计模式之惰性模式(二)
2017/09/29 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
Angular Excel 导入与导出的实现代码
2019/04/17 Javascript
ES6 class的应用实例分析
2019/06/27 Javascript
JS获取动态添加元素的方法详解
2019/07/31 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
2020/08/14 Javascript
Python单例模式实例分析
2015/01/14 Python
Python使用minidom读写xml的方法
2015/06/03 Python
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
pycharm修改文件的默认打开方式的步骤
2019/07/29 Python
python时间与Unix时间戳相互转换方法详解
2020/02/13 Python
python3安装OCR识别库tesserocr过程图解
2020/04/02 Python
HTML5 Canvas之测试浏览器是否支持Canvas的方法
2015/01/01 HTML / CSS
高中课程设置方案
2014/05/28 职场文书
幼儿园大班区域活动总结
2014/07/09 职场文书
房屋租房协议书范本
2014/12/04 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
医学生自荐信范文
2015/03/05 职场文书
被告答辩状范文
2015/05/22 职场文书
2015年小学语文教师工作总结
2015/10/23 职场文书
体育教师研修感悟
2015/11/18 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
Spring Data JPA使用JPQL与原生SQL进行查询的操作
2021/06/15 Java/Android