防止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 相关文章推荐
Jquery多选下拉列表插件jquery multiselect功能介绍及使用
May 24 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
Sep 15 Javascript
在JavaScript中使用JSON数据
Feb 15 Javascript
jQuery获取单击节点对象的方法
Jun 02 Javascript
jquery easyUI中ajax异步校验用户名
Aug 19 Javascript
简单分析javascript中的函数
Sep 10 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
Dec 24 Javascript
swiper动态改变滑动内容的实现方法
Jan 17 Javascript
jQuery基于闭包实现的显示与隐藏div功能示例
Jun 09 jQuery
微信小程序返回上一页传参并刷新过程解析
Dec 13 Javascript
Element el-button 按钮组件的使用详解
Feb 01 Javascript
一文帮你理解PReact10.5.13源码
Apr 03 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
一些操作和快捷键的理解和讨论
2020/03/04 星际争霸
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
2014/10/30 PHP
php实现MySQL数据库备份与还原类实例
2014/12/09 PHP
PHP使用DOM对XML解析处理操作示例
2019/07/04 PHP
php+mysql实现的无限分类方法类定义与使用示例
2020/05/27 PHP
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
纯JavaScript实现的完美渐变弹出层效果代码
2010/04/02 Javascript
表头固定(利用jquery实现原理介绍)
2012/11/08 Javascript
浅谈jQuery事件绑定原理
2015/01/02 Javascript
javascript中$(function() {});写与不写有哪些区别
2015/08/10 Javascript
javascript实现unicode与ASCII相互转换的方法
2015/12/10 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
2016/01/27 Javascript
微信小程序 底部导航栏目开发资料
2016/12/05 Javascript
详解jQuery停止动画——stop()方法的使用
2016/12/14 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
javascript中replace使用方法总结
2017/03/01 Javascript
vue2.0结合Element实现select动态控制input禁用实例
2017/05/12 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
详解Vue前端生产环境发布配置实战篇
2019/05/07 Javascript
基于element-ui封装表单金额输入框的方法示例
2021/01/06 Javascript
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python 错误和异常小结
2013/10/09 Python
python使用urllib模块开发的多线程豆瓣小站mp3下载器
2014/01/16 Python
python中的装饰器详解
2015/04/13 Python
Python中pygame安装方法图文详解
2015/11/11 Python
Python实现利用163邮箱远程关电脑脚本
2018/02/22 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
python itchat实现调用微信接口的第三方模块方法
2019/06/11 Python
Python3中的tuple函数知识点讲解
2021/01/03 Python
台湾前三大B2C购物网站:MOMO购物网
2017/04/27 全球购物
数学教师个人总结
2015/02/06 职场文书
靠谱准确的求职信
2019/04/02 职场文书
电子表的操作介绍说明书
2019/10/28 职场文书
手把手教你导入Go语言第三方库
2021/08/04 Golang
clear 万能清除浮动(clearfix:after)
2023/05/21 HTML / CSS