防止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 相关文章推荐
JS模拟多线程
Feb 07 Javascript
Vue组件开发初探
Feb 14 Javascript
vue.js开发环境搭建教程
May 04 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
May 11 Javascript
React-Native中禁用Navigator手势返回的示例代码
Sep 09 Javascript
前端MVVM框架解析之双向绑定
Jan 24 Javascript
jsonp跨域获取数据的基础教程
Jul 01 Javascript
JS实现从对象获取对象中单个键值的方法示例
Jun 05 Javascript
JS实现简单的文字无缝上下滚动功能示例
Jun 22 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
Apr 03 Javascript
JS 设计模式之:工厂模式定义与实现方法浅析
May 06 Javascript
vue 调用 RESTful风格接口操作
Aug 11 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
国外比较好的几个的Php开源建站平台小结
2010/04/22 PHP
谷歌音乐搜索栏的提示功能php修正代码
2011/05/09 PHP
PHP判断远程图片是否存在的几种方法
2014/05/04 PHP
WordPress网站性能优化指南
2015/11/18 PHP
php文件上传及下载附带显示文件及目录功能
2017/04/27 PHP
PHP中$GLOBALS与global的区别详解
2019/03/21 PHP
JQuery加载图片自适应固定大小的DIV
2013/09/12 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
2016/08/02 Javascript
javascript循环链表之约瑟夫环的实现方法
2017/01/16 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
2017/02/17 Javascript
原生js实现放大镜
2017/02/20 Javascript
javascript中json对象json数组json字符串互转及取值方法
2017/04/19 Javascript
浅谈struts1 & jquery form 文件异步上传
2017/05/25 jQuery
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
javaScript手机号码校验工具类PhoneUtils详解
2017/12/08 Javascript
vue操作下拉选择器获取选择的数据的id方法
2018/08/24 Javascript
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
vue+Element实现搜索关键字高亮功能
2019/05/28 Javascript
Vue实现多标签选择器
2019/11/28 Javascript
js实现div色块碰撞
2020/01/16 Javascript
js实现无刷新监听URL的变化示例代码详解
2020/06/03 Javascript
[43:57]LGD vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python设置windows桌面壁纸的实现代码
2013/01/28 Python
Python实现简易Web爬虫详解
2018/01/03 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
Python绘制频率分布直方图的示例
2019/07/08 Python
python字符串的拼接方法总结
2019/11/18 Python
CSS3地图动态实例代码(圆圈向外扩散)
2018/06/15 HTML / CSS
基于html5 canvas实现漫天飞雪效果实例
2014/09/10 HTML / CSS
军神教学反思
2014/02/04 职场文书
学校教师读书活动总结
2014/07/08 职场文书
纪念九一八爱国演讲稿600字
2014/09/14 职场文书
逃课打麻将检讨书
2014/10/05 职场文书
《火烧云》教学反思
2016/02/23 职场文书