防止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 相关文章推荐
语义化 H1 标签
Jan 14 Javascript
JQuery 无废话系列教程(二) jquery实战篇上
Jun 23 Javascript
javascript 写类方式之二
Jul 05 Javascript
JavaScript 继承使用分析
May 12 Javascript
js 去掉空格实例 Trim() LTrim() RTrim()
Jan 07 Javascript
微信小程序 开发之全局配置
May 05 Javascript
基于Bootstrap table组件实现多层表头的实例代码
Sep 07 Javascript
原生JS实现图片无缝滚动方法(附带封装的运动框架)
Oct 01 Javascript
Vue Socket.io源码解读
Feb 07 Javascript
Vue2.0 http请求以及loading展示实例
Mar 06 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
Aug 31 Javascript
node+multer实现图片上传的示例代码
Feb 18 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
Laravel框架路由配置总结、设置技巧大全
2014/09/03 PHP
PHP计算加权平均数的方法
2015/07/16 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
Laravel中如何增加自定义全局函数详解
2017/05/09 PHP
认识延迟时间为0的setTimeout
2008/05/16 Javascript
解析offsetHeight,clientHeight,scrollHeight之间的区别
2013/11/20 Javascript
一个JavaScript的求爱小特效
2014/05/09 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
javascript截取字符串小结
2015/04/28 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
2016/05/11 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
使用grunt合并压缩js和css文件的方法
2017/03/02 Javascript
vue-cli3.0 特性解读
2018/04/22 Javascript
layUI实现列表查询功能
2019/07/27 Javascript
layui实现数据表格自定义数据项
2019/10/26 Javascript
Quasar Input:type="number" 去掉上下小箭头 实现加减按钮样式功能
2020/04/09 Javascript
jQuery实现简单评论功能
2020/08/19 jQuery
python实现简单ftp客户端的方法
2015/06/28 Python
Python之dict(或对象)与json之间的互相转化实例
2018/06/05 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
使用python opencv对目录下图片进行去重的方法
2019/01/12 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
python实现将视频按帧读取到自定义目录
2019/12/10 Python
从pandas一个单元格的字符串中提取字符串方式
2019/12/17 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
怎么解决pycharm license Acti的方法
2020/10/28 Python
使用OpenCV校准鱼眼镜头的方法
2020/11/26 Python
中海讯通笔试题
2015/09/15 面试题
门卫岗位职责
2013/11/15 职场文书
工业自动化毕业生自荐信范文
2014/01/04 职场文书
自考生自我评价分享
2014/01/18 职场文书
关于廉洁的广播稿
2014/01/30 职场文书
贸易经济专业自荐书
2014/06/29 职场文书
2014年客服工作总结范文
2014/11/13 职场文书
三峡导游词
2015/01/31 职场文书
教师学期末个人总结
2015/02/13 职场文书