防止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 相关文章推荐
jqgrid 简单学习笔记
May 03 Javascript
JavaScript XML和string相互转化实现代码
Jul 04 Javascript
JavaScript中匿名、命名函数的性能测试
Sep 04 Javascript
JS数组的常见用法实例
Feb 10 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
Aug 10 Javascript
javascript适合移动端的日期时间拾取器
Nov 10 Javascript
JavaScript Split()方法
Dec 18 Javascript
浅谈Vuex的状态管理(全家桶)
Nov 04 Javascript
js判断传入时间和当前时间大小实例(超简单)
Jan 11 Javascript
vue-cli项目代理proxyTable配置exclude的方法
Sep 20 Javascript
layer更改皮肤的实现方法
Sep 11 Javascript
使用Vant完成Dialog弹框案例
Nov 11 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控制网页过期时间的代码
2008/09/28 PHP
php SQL之where语句生成器
2009/03/24 PHP
PHP中对缓冲区的控制实现代码
2013/09/29 PHP
php实现的短网址算法分享
2014/06/20 PHP
php中执行系统命令的方法
2015/03/21 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
2020/09/25 PHP
javascript 继承实现方法
2009/08/26 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
2013/01/21 Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
2015/05/15 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
2015/11/26 Javascript
详解js中构造流程图的核心技术JsPlumb
2015/12/08 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
用 js 的 selection range 操作选择区域内容和图片
2017/04/18 Javascript
jQuery中将json数据显示到页面表格的方法
2018/05/27 jQuery
Vue cli3 库模式搭建组件库并发布到 npm的流程
2018/10/12 Javascript
vue实现路由切换改变title功能
2019/05/28 Javascript
layui实现下拉框三级联动
2019/07/26 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
2019/08/01 Javascript
js针对图片加载失败的处理方法分析
2019/08/24 Javascript
JS防抖和节流实例解析
2019/09/24 Javascript
纯js实现无缝滚动功能代码实例
2020/02/21 Javascript
vue监听浏览器原生返回按钮,进行路由转跳操作
2020/09/09 Javascript
[01:07:22]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG加赛
2014/05/26 DOTA
遗传算法之Python实现代码
2017/10/10 Python
PyCharm在win10的64位系统安装实例
2017/11/26 Python
Python 实现的 Google 批量翻译功能
2019/08/26 Python
python3下pygame如何实现显示中文
2020/01/11 Python
Python列表切片常用操作实例解析
2020/03/10 Python
MATLAB数学建模之画图汇总
2020/07/16 Python
Python selenium实现断言3种方法解析
2020/09/08 Python
Python的logging模块基本用法
2020/12/24 Python
英国家电直销:Appliances Direct
2016/09/22 全球购物
摩托车和ATV零件、配件和服装的首选在线零售商:MotoSport
2017/12/22 全球购物
大学生求职简历的自我评价
2013/10/14 职场文书
交通事故和解协议书
2015/01/27 职场文书