防止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
javascript 图片上一张下一张链接效果代码
Mar 12 Javascript
JQuery扩展插件Validate 3通过参数设置错误信息
Sep 05 Javascript
纯js实现遮罩层效果原理分析
May 27 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
Aug 26 Javascript
利用require.js与angular搭建spa应用的方法实例
Jul 19 Javascript
jquery动态赋值id与动态取id方法示例
Aug 21 jQuery
JS库之ParticlesJS使用简介
Sep 12 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
Sep 04 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
Jul 11 Javascript
vue实现一个矩形标记区域(rectangle marker)的方法
Oct 28 Javascript
关于angular 8.1使用过程中的一些记录
Nov 25 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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
PHP中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
php简单实现发送带附件的邮件
2015/06/10 PHP
Yii实现的多级联动下拉菜单
2016/07/13 PHP
javascript css styleFloat和cssFloat
2010/03/15 Javascript
jquery选择器之属性过滤选择器详解
2014/01/27 Javascript
通过JQuery将DIV的滚动条滚动到指定的位置方便自动定位
2014/05/05 Javascript
jQuery表格插件datatables用法总结
2014/09/05 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
2014/12/16 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
jQuery如何跳转到另一个网页 就这么简单
2016/12/28 Javascript
利用jQuery实现一个简单的表格上下翻页效果
2017/03/14 Javascript
Angular.Js中ng-include指令的使用与实现
2017/05/07 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
深入理解node.js http模块
2018/01/24 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
2019/01/19 Javascript
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
2019/05/26 Javascript
python 删除非空文件夹的实例
2018/04/26 Python
PyCharm+PySpark远程调试的环境配置的方法
2018/11/29 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
2019/06/08 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
2019/06/27 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
windows下python安装pip方法详解
2020/02/10 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
2020/03/24 Python
协程Python 中实现多任务耗资源最小的方式
2020/10/19 Python
一款利用html5和css3实现的3D滚动特效的教程
2015/01/04 HTML / CSS
保安拾金不昧表扬信
2014/01/15 职场文书
集体婚礼策划方案
2014/02/22 职场文书
护士个人年终总结
2015/02/13 职场文书
航班延误投诉信
2015/07/02 职场文书
超级实用的公文标题大全!
2019/07/19 职场文书
Lombok的详细使用及优缺点总结
2021/07/15 Java/Android