防止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 相关文章推荐
Javascript 检测、添加、移除样式(className)函数代码
Sep 08 Javascript
jQuery实现id模糊查询的小例子
Mar 19 Javascript
javascript学习笔记(四)function函数部分
Sep 30 Javascript
jQuery检测滚动条是否到达底部
Dec 15 Javascript
js判断当前页面用什么浏览器打开的方法
Jan 06 Javascript
全面了解addEventListener和on的区别
Jul 14 Javascript
javaScript给元素添加多个class的简单实现
Jul 20 Javascript
javascript实现的上下无缝滚动效果
Sep 19 Javascript
基于JavaScript实现活动倒计时效果
Apr 20 Javascript
解决Vue2.x父组件与子组件之间的双向绑定问题
Mar 06 Javascript
JS异步处理的进化史深入讲解
Aug 25 Javascript
nuxt引入组件和公共样式的操作
Nov 05 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
如何冲泡挂耳包咖啡?技巧是什么
2021/03/04 冲泡冲煮
使用PHPMailer实现邮件发送代码分享
2014/10/23 PHP
ThinkPHP模版引擎之变量输出详解
2014/12/05 PHP
PHP操作mysql数据库分表的方法
2016/06/09 PHP
PHP GD库相关图像生成和处理函数小结
2016/09/30 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
我用的一些Node.js开发工具、开发包、框架等总结
2014/09/25 Javascript
javascript 回调函数详解
2014/11/11 Javascript
在JavaScript的正则表达式中使用exec()方法
2015/06/16 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
2017/02/19 Javascript
Angular组件化管理实现方法分析
2017/03/17 Javascript
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
Vue学习笔记进阶篇之vue-cli安装及介绍
2017/07/18 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
vue.js配合$.post从后台获取数据简单demo分享
2018/08/11 Javascript
[02:29]大剑、皮鞭、女装,这届DOTA2勇士令状里都有
2020/07/17 DOTA
[49:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第二场 3月4日
2021/03/11 DOTA
Python 专题三 字符串的基础知识
2017/03/19 Python
python 并发下载器实现方法示例
2019/11/22 Python
Python使用Pandas库常见操作详解
2020/01/16 Python
python中二分查找法的实现方法
2020/12/06 Python
HTML5 placeholder属性详解
2016/06/22 HTML / CSS
html5指南-3.如何实现html元素拖拽功能
2013/01/07 HTML / CSS
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
波比布朗英国官网:Bobbi Brown英国
2017/11/13 全球购物
翻新二手苹果产品的网络领导者:Mac of all Trades
2017/12/19 全球购物
葛优非诚勿扰搞笑征婚台词
2014/03/17 职场文书
王力宏牛津大学演讲稿
2014/05/22 职场文书
毕业实习自我鉴定范文2014
2014/09/26 职场文书
人身损害赔偿协议书范本
2014/09/27 职场文书
亮剑观后感600字
2015/06/05 职场文书
花田少年史观后感
2015/06/16 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
python 利用 PIL 将数组值转成图片的实现
2021/04/12 Python
python保存大型 .mat 数据文件报错超出 IO 限制的操作
2021/05/10 Python
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python