防止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 相关文章推荐
FCK调用方法..
Dec 21 Javascript
js 获取服务器控件值的代码
Mar 05 Javascript
javascript URL编码和解码使用说明
Apr 12 Javascript
js如何调用qq互联api实现第三方登录
Mar 28 Javascript
js窗口关闭提示信息(兼容IE和firefox)
Oct 23 Javascript
JS使用cookie实现DIV提示框只显示一次的方法
Nov 05 Javascript
全面详细的jQuery常见开发技巧手册
Feb 21 Javascript
window.onload绑定多个事件的两种解决方案
May 15 Javascript
Javascript中常用的检测方法小结
Oct 08 Javascript
zTree 树插件实现全国五级地区点击后加载的示例
Feb 05 Javascript
JS阻止事件冒泡的方法详解
Aug 26 Javascript
在vue中嵌入外部网站的实现
Nov 13 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生成静态HTML文档的原理
2012/10/29 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
学习php设计模式 php实现装饰器模式(decorator)
2015/12/07 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
javascript 点击整页变灰的效果(可做退出效果)。
2008/01/09 Javascript
js 蒙版进度条(结合图片)
2010/03/10 Javascript
ajax上传时参数提交不更新等相关问题
2012/12/11 Javascript
extjs tabpanel限制选项卡数量实现思路及代码
2013/04/02 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
jQuery实现可以控制图片旋转角度效果(附demo源码下载)
2016/01/27 Javascript
bootstrap flask登录页面编写实例
2016/11/01 Javascript
iview中Select 选择器多选校验方法
2018/03/15 Javascript
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
laydate如何根据开始时间或者结束时间限制范围
2018/11/15 Javascript
vuex如何重置所有state(可定制)
2019/01/17 Javascript
vue slot与传参实例代码讲解
2019/04/28 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
2020/03/04 Javascript
python实现bitmap数据结构详解
2014/02/17 Python
Python学习笔记整理3之输入输出、python eval函数
2015/12/14 Python
Python获取当前页面内所有链接的四种方法对比分析
2017/08/19 Python
Python爬取附近餐馆信息代码示例
2017/12/09 Python
python自定义时钟类、定时任务类
2021/02/22 Python
python读取word 中指定位置的表格及表格数据
2019/10/23 Python
Python unittest单元测试框架及断言方法
2020/04/15 Python
Python logging模块进行封装实现原理解析
2020/08/07 Python
BONIA波尼亚新加坡官网:皮革手袋,鞋类和配件
2016/08/25 全球购物
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
开展批评与自我批评发言材料
2014/05/15 职场文书
小学语文业务学习材料
2014/06/02 职场文书
七年级写作指导之游记作文
2019/10/07 职场文书
SpringBoot项目中控制台日志的保存配置操作
2021/06/18 Java/Android
CSS+HTML 实现顶部导航栏功能
2021/08/30 HTML / CSS
聊聊CSS粘性定位sticky案例解析
2022/06/01 HTML / CSS