防止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 相关文章推荐
Code:loadScript( )加载js的功能函数
Feb 02 Javascript
IE与firefox之jquery用法区别
Oct 03 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
Jun 27 Javascript
javascript中通过arguments参数伪装方法重载
Oct 08 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
Aug 31 Javascript
js实现跨域访问的三种方法
Dec 09 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
Oct 17 Javascript
js实现左右两侧浮动广告
Jul 09 Javascript
详解ES6 Promise对象then方法链式调用
Oct 20 Javascript
vue中使用vee-validator完成表单校验方案
Nov 01 Javascript
微信公众号服务器验证Token步骤图解
Dec 30 Javascript
js实现九宫格布局效果
May 28 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实现快速排序的三种方法分享
2014/03/12 PHP
IE6-IE9不支持table.innerHTML的解决方法分享
2012/09/14 Javascript
Javascript写入txt和读取txt文件示例
2014/02/12 Javascript
提升PHP安全:8个必须修改的PHP默认配置
2014/11/17 Javascript
jQuery大于号(>)选择器的作用解释
2015/01/13 Javascript
JavaScript 事件对象介绍
2015/04/13 Javascript
jQuery实现冻结表格行和列
2015/04/29 Javascript
浅析js中substring和substr的方法
2015/11/09 Javascript
jquery zTree异步加载、模糊搜索简单实例分享
2016/03/24 Javascript
详解JavaScript中的自定义事件编写
2016/05/10 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
2016/09/20 Javascript
微信小程序 自己制作小组件实例详解
2016/12/22 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
webpack2.0搭建前端项目的教程详解
2017/04/05 Javascript
使用Vue CLI创建typescript项目的方法
2019/08/09 Javascript
python使用代理ip访问网站的实例
2018/05/07 Python
python中的decimal类型转换实例详解
2019/06/26 Python
Python用Try语句捕获异常的实例方法
2019/06/26 Python
python框架flask表单实现详解
2019/11/04 Python
Django实现简单网页弹出警告代码
2019/11/15 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
基于python图像处理API的使用示例
2020/04/03 Python
python如何调用java类
2020/07/05 Python
python 调整图片亮度的示例
2020/12/03 Python
python读取excel数据并且画图的实现示例
2021/02/08 Python
Daniel Wellington官方海外旗舰店:丹尼尔惠灵顿DW手表
2018/02/22 全球购物
日本小田急百货官网:Odakyu
2018/07/19 全球购物
无工作经验者个人求职信范文
2013/12/22 职场文书
劳动工资科岗位职责范本
2014/03/02 职场文书
教师一岗双责责任书
2014/04/16 职场文书
加油口号大全
2014/06/13 职场文书
开展党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
幼儿园教师个人总结
2015/02/05 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle