防止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 23 Javascript
网页下载文件期间如何防止用户对网页进行其他操作
Jun 27 Javascript
moment.js轻松实现获取当前日期是当年的第几周
Feb 05 Javascript
js基础知识(公有方法、私有方法、特权方法)
Nov 06 Javascript
javascript中checkbox使用方法实例演示
Nov 19 Javascript
JS实现图片的不间断连续滚动的简单实例
Jun 03 Javascript
Bootstrap缩略图与警告框学习使用
Feb 08 Javascript
jQuery Ajax全解析
Feb 13 Javascript
jQuery中可见性过滤器简单用法示例
Mar 31 jQuery
JavaScript中的 new 命令
May 22 Javascript
详解ES6中class的实现原理
Oct 03 Javascript
vue 获取url里参数的两种方法小结
Nov 12 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开发工具之vs2005图解
2008/01/12 PHP
Laravel 5.3 学习笔记之 错误&日志
2016/08/28 PHP
完美解决在ThinkPHP控制器中命名空间的问题
2017/05/05 PHP
彪哥1.1(智能表格)提供下载
2006/09/07 Javascript
jquery中ajax学习笔记一
2011/10/16 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
学习JavaScript设计模式之享元模式
2016/01/18 Javascript
灵活的理解JavaScript中的this指向
2016/02/25 Javascript
require简单实现单页应用程序(SPA)
2016/07/12 Javascript
jquery代码规范让代码越来越好看
2017/02/03 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
vue+node+webpack环境搭建教程
2017/11/05 Javascript
AngularJS基于MVC的复杂操作实例讲解
2017/12/31 Javascript
JS实现的缓冲运动效果示例
2018/04/30 Javascript
开发一个Parcel-vue脚手架工具(详细步骤)
2018/09/22 Javascript
JQuery Ajax执行跨域请求数据的解决方案
2018/12/10 jQuery
利用Node.js如何实现文件循环覆写
2019/04/05 Javascript
Vue toFixed保留两位小数的3种方式
2020/10/23 Javascript
[05:06]2017亚洲邀请赛DAC回顾片
2017/04/19 DOTA
利用Django框架中select_related和prefetch_related函数对数据库查询优化
2015/04/01 Python
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
2018/02/24 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
Python request使用方法及问题总结
2020/04/26 Python
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
Linux中如何设置Java环境变量(Ubuntu)
2016/07/24 面试题
金融专业个人求职信范文
2013/11/28 职场文书
幼儿教师研修感言
2014/02/12 职场文书
《走一步再走一步》教学反思
2014/02/15 职场文书
党员党性分析材料
2014/02/17 职场文书
户籍证明格式
2014/09/15 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书
数学复习课教学反思
2016/02/18 职场文书