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中防止错误导致的进程阻塞的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js判断浏览器类型为ie6时不执行
Jun 15 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
Aug 27 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
Dec 17 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
Mar 11 Javascript
Javascript中的对象和原型(二)
Aug 12 Javascript
js手动播放图片实现图片轮播效果
Sep 17 Javascript
Vue2递归组件实现树形菜单
Apr 10 Javascript
node+express+ejs使用模版引擎做的一个示例demo
Sep 18 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
Oct 20 Javascript
微信小程序仿通讯录功能
Apr 09 Javascript
解决vue安装less报错Failed to compile with 1 errors的问题
Oct 22 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
Jan 06 Javascript
浅谈js中对象的使用
Aug 11 #Javascript
js倒计时简单实现代码
Aug 11 #Javascript
原生态js,鼠标按下后,经过了那些单元格的简单实例
Aug 11 #Javascript
vue分页组件table-pagebar使用实例解析
Nov 15 #Javascript
使用BootStrap实现用户登录界面UI
Aug 10 #Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
Aug 10 #Javascript
BootStrap Typeahead自动补全插件实例代码
Aug 10 #Javascript
You might like
PHP $_FILES函数详解
2011/03/09 PHP
表格展示无限级分类(PHP版)
2012/08/21 PHP
解析php入库和出库
2013/06/25 PHP
php5.x禁用eval的操作方法
2018/10/19 PHP
Javascript面向对象扩展库代码分享
2012/03/27 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
javascript内置对象arguments详解
2014/03/16 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
在HTML代码中使用JavaScript代码的例子
2014/10/16 Javascript
jquery中radio checked问题
2015/03/16 Javascript
JavaScript用select实现日期控件
2015/07/17 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
Bootstrap表单组件教程详解
2016/04/26 Javascript
Backbone View 之间通信的三种方式
2016/08/09 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
2017/07/28 Javascript
JS中使用media实现响应式布局
2017/08/04 Javascript
Three.js基础学习教程
2017/11/16 Javascript
初识 Vue.js 中的 *.Vue文件
2017/11/22 Javascript
Thinkjs3新手入门之添加一个新的页面
2017/12/06 Javascript
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
Python编程中实现迭代器的一些技巧小结
2016/06/21 Python
Python实现登录接口的示例代码
2017/07/21 Python
python使用Pycharm创建一个Django项目
2018/03/05 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
2020/01/08 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
2020/04/10 Python
Jupyter Notebook添加代码自动补全功能的实现
2021/01/07 Python
css图标制作教程制作云图标
2014/01/19 HTML / CSS
微软中国官方商城:Microsoft Store中国
2018/10/12 全球购物
豪华复古化妆:Besame Cosmetics
2019/09/06 全球购物
国际花店:Pickup Flowers
2020/04/10 全球购物
请写出一段Python代码实现删除一个list里面的重复元素
2015/12/29 面试题
儿科护士自我鉴定
2013/10/14 职场文书
电钳专业个人求职信
2014/01/04 职场文书
我们的节日中秋节活动总结
2015/03/23 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书