防止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 相关文章推荐
用于table内容排序
Jul 21 Javascript
利用jQuery的$.event.fix函数统一浏览器event事件处理
Dec 21 Javascript
Javascript计算时间差的函数分享
Jul 04 Javascript
13 个JavaScript 性能提升技巧分享
Jul 26 Javascript
jQuery之按钮组件的深入解析
Jun 19 Javascript
javascript中如何处理引号编码"
Aug 15 Javascript
JS实现的一个简单的Autocomplete自动完成例子
Apr 16 Javascript
Jquery中CSS选择器用法分析
Feb 10 Javascript
javascript实现可拖动变色并关闭层窗口实例
May 15 Javascript
Javascript实现Array和String互转换的方法
Dec 21 Javascript
JS求Number类型数组中最大元素方法
Apr 08 Javascript
JS前端使用canvas实现物体的点选示例
Aug 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
关于二级目录拖拽排序的实现(源码示例下载)
2013/04/26 PHP
PHP 文件编程综合案例-文件上传的实现
2013/07/03 PHP
PHP设置一边执行一边输出结果的代码
2013/09/30 PHP
php实现的简单日志写入函数
2015/03/31 PHP
PHP抽奖算法程序代码分享
2015/10/08 PHP
laravel 根据不同组织加载不同视图的实现
2019/10/14 PHP
javascript动态添加样式(行内式/嵌入式/外链式等规则)
2013/06/24 Javascript
php 中序列化和json使用介绍
2013/07/08 Javascript
JS去除数组重复值的五种不同方法
2013/09/06 Javascript
js获取html文件的思路及示例
2013/09/17 Javascript
JavaScript设置获取和设置属性的方法
2015/03/04 Javascript
nodejs实现HTTPS发起POST请求
2015/04/23 NodeJs
JavaScript表单验证开发
2016/11/23 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
2016/11/23 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
CentOS环境中MySQL修改root密码方法
2018/01/07 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
2018/03/03 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
2019/06/21 Javascript
深入学习js函数的隐式参数 arguments 和 this
2019/06/24 Javascript
node.js express框架简介与实现
2019/07/23 Javascript
es6数组之扩展运算符操作实例分析
2020/04/25 Javascript
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
Python itertools模块详解
2015/05/09 Python
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
Python 专题一 函数的基础知识
2017/03/16 Python
使用python实现链表操作
2018/01/26 Python
python pandas dataframe 行列选择,切片操作方法
2018/04/10 Python
关于python2 csv写入空白行的问题
2018/06/22 Python
PyCharm+PySpark远程调试的环境配置的方法
2018/11/29 Python
python 缺失值处理的方法(Imputation)
2019/07/02 Python
德国咖啡批发商:Coffeefair
2019/08/26 全球购物
几道数据库的面试题或笔试题
2014/05/31 面试题
营销学习心得体会
2014/09/12 职场文书
ubuntu下常用apt命令介绍
2022/06/05 Servers