防止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 相关文章推荐
js传值 判断
Oct 26 Javascript
很棒的学习jQuery的12个网站推荐
Apr 28 Javascript
jQuery ajax 路由和过滤器使用说明
Aug 02 Javascript
jquery单选框radio绑定click事件实现方法
Jan 14 Javascript
Jquery 效果使用详解
Nov 23 Javascript
JS制作适用于手机和电脑的通知信息效果
Oct 28 Javascript
原生js编写基于面向对象的分页组件
Dec 05 Javascript
Bootstrap表格使用方法详解
Feb 17 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
Jun 04 Javascript
浅谈vuex之mutation和action的基本使用
Aug 29 Javascript
vue路由嵌套的SPA实现步骤
Nov 06 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
Sep 10 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
PHP4与PHP5的时间格式问题
2008/02/17 PHP
php 智能404跳转代码,适合换域名没改变目录的网站
2010/06/04 PHP
PHP手机号码归属地查询代码(API接口/mysql)
2012/09/04 PHP
PHP编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
有关PHP性能优化的介绍
2013/06/20 PHP
ThinkPHP实现带验证码的文件上传功能实例
2014/11/01 PHP
php获取指定数量随机字符串的方法
2017/02/06 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
javascript form 验证函数 弹出对话框形式
2009/06/23 Javascript
基于jquery完美拖拽,可返回拖动轨迹
2012/03/29 Javascript
javascript学习笔记(十九) 节点的操作实现代码
2012/06/20 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
第三篇Bootstrap网格基础
2016/06/21 Javascript
Node.js Express安装与使用教程
2018/05/11 Javascript
浅谈Node.js 中间件模式
2018/06/12 Javascript
vue列表单项展开收缩功能之this.$refs的详解
2019/05/05 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
详解基于Wepy开发小程序插件(推荐)
2019/08/01 Javascript
Vue实现滑动拼图验证码功能
2019/09/15 Javascript
three.js 将图片马赛克化的示例代码
2020/07/31 Javascript
Python文件操作之合并文本文件内容示例代码
2017/09/19 Python
Python中的并发处理之asyncio包使用的详解
2018/04/03 Python
python更改已存在excel文件的方法
2018/05/03 Python
Python实现生成密码字典的方法示例
2019/09/02 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
python使用hdfs3模块对hdfs进行操作详解
2020/06/06 Python
CSS3实现的渐变幻灯片效果
2020/12/07 HTML / CSS
澳洲女装时尚在线:Blue Bungalow
2018/05/05 全球购物
教师评优的个人自我评价分享
2013/09/19 职场文书
怎样写留学自荐信
2013/11/11 职场文书
销售找工作求职信
2013/12/20 职场文书
放飞理想演讲稿
2014/09/09 职场文书
教师政风行风评议心得体会
2014/10/21 职场文书
2014年小学教导处工作总结
2014/12/19 职场文书
2016年世界人口日宣传活动总结
2016/04/05 职场文书
MySQL中使用or、in与union all在查询命令下的效率对比
2021/05/26 MySQL