防止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 相关文章推荐
ExtJS 学习专题(一) 如何应用ExtJS(附实例)
Mar 11 Javascript
onbeforeunload与onunload事件异同点总结
Jun 24 Javascript
JQuery.Ajax之错误调试帮助信息介绍
Jul 04 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
Jun 09 Javascript
javascript三种代码注释方法
Jun 02 Javascript
详解javascript表单的Ajax提交插件的使用
Dec 29 Javascript
javascript设计模式之Adapter模式【适配器模式】实现方法示例
Jan 13 Javascript
基于vue 实现token验证的实例代码
Dec 14 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
Sep 30 Javascript
微信小程序自定义tabBar组件开发详解
Sep 24 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
Mar 02 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
Mar 09 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
Codeigniter的dom类用法实例
2015/06/26 PHP
php 如何获取文件的后缀名
2016/06/05 PHP
PHP中for循环与foreach的区别
2017/03/06 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
微信推送功能实现方式图文详解
2019/07/12 PHP
JS 统计时间
2021/03/09 Javascript
小型js框架veryide.librar源代码
2009/03/05 Javascript
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
2010/07/17 Javascript
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
javascript学习笔记(四) Number 数字类型
2012/06/19 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
2013/06/09 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
JavaScript设计模式之单体模式全面解析
2016/09/09 Javascript
详解vue-cli脚手架中webpack配置方法
2018/08/22 Javascript
Vue列表渲染的示例代码
2018/11/01 Javascript
微信小程序时间标签和时间范围的联动效果
2019/02/15 Javascript
Vue中图片Src使用变量的方法
2019/10/30 Javascript
vue+canvas实现拼图小游戏
2020/09/18 Javascript
JS实现无限轮播无倒退效果
2020/09/21 Javascript
Python浅拷贝与深拷贝用法实例
2015/05/09 Python
Python 实现数据库(SQL)更新脚本的生成方法
2017/07/09 Python
Python实现读取字符串按列分配后按行输出示例
2018/04/17 Python
基于Python中isfile函数和isdir函数使用详解
2019/11/29 Python
pycharm运行程序时看不到任何结果显示的解决
2020/02/21 Python
keras的siamese(孪生网络)实现案例
2020/06/12 Python
python中@property的作用和getter setter的解释
2020/12/22 Python
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
南京某软件公司的.net面试题
2015/11/30 面试题
Java的类与C++的类有什么不同
2014/01/18 面试题
环保专业大学生职业规划设计
2014/01/10 职场文书
跳槽求职信范文
2014/05/26 职场文书
供用电专业求职信
2014/07/07 职场文书
联谊活动总结
2014/08/28 职场文书
初中化学教学反思
2016/02/22 职场文书
python实现剪贴板的操作
2021/07/01 Python
python使用BeautifulSoup 解析HTML
2022/04/24 Python