防止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 BS,dialog控件自适应大小
Jul 06 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
Dec 11 Javascript
基于jquery实现点击左右按钮图片横向滚动
Apr 11 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
Jul 01 Javascript
JavaScript判断密码强度(自写代码)
Sep 06 Javascript
jQuery实现时尚漂亮的弹出式对话框实例
Aug 07 Javascript
基于Bootstrap重置输入框内容按钮插件
May 12 Javascript
JavaScript简单生成 N~M 之间随机数的方法
Jan 13 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
Feb 09 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
Apr 21 Javascript
AngularJS 多指令Scope问题的解决
Oct 25 Javascript
js实现飞机大战小游戏
Aug 26 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
配置支持SSI
2006/11/25 PHP
php获取数组中重复数据的两种方法
2013/06/28 PHP
php获取json数据所有的节点路径
2015/05/17 PHP
PHP模板引擎Smarty中的保留变量用法分析
2016/04/11 PHP
php判断是否连接上网络的方法实例详解
2016/12/14 PHP
Laravel使用支付宝进行支付的示例代码
2017/08/16 PHP
给Function做的OOP扩展
2009/05/07 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
详解angular element()方法使用
2017/04/08 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
Vue常用的几个指令附完整案例
2018/11/06 Javascript
Vue infinite update loop的问题解决
2019/04/23 Javascript
JS写滑稽笑脸运动效果
2020/05/28 Javascript
vue实现图片上传到后台
2020/06/29 Javascript
使用PDB模式调试Python程序介绍
2015/04/05 Python
Python中一行和多行import模块问题
2018/04/01 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
python绘制分布折线图的示例
2020/09/24 Python
美国派对用品及装饰品网上商店:Shindigz
2016/07/30 全球购物
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
英国最大线上综合鞋类商城:Office
2017/12/08 全球购物
Manuka Doctor英国官网:真正的麦卢卡蜂蜜和护肤品
2018/10/26 全球购物
国贸专业个人求职信范文
2014/01/08 职场文书
应用数学专业求职信
2014/03/14 职场文书
运动会演讲稿
2014/05/07 职场文书
金融专业求职信
2014/08/05 职场文书
教师工作态度自我评价
2015/03/05 职场文书
职位证明模板
2015/06/23 职场文书
话题作文之呼唤
2019/12/18 职场文书
python中的plt.cm.Paired用法说明
2021/05/31 Python
python自动计算图像数据集的RGB均值
2021/06/18 Python
python scrapy简单模拟登录的代码分析
2021/07/21 Python
基于Python实现西西成语接龙小助手
2022/08/05 Golang