Node.js Domain(域) 简化异步代码的异常处理,可以捕捉处理try catch无法捕捉的异常。引入 Domain 模块 语法格式如下:

var domain = require("domain")

domain模块,把处理多个不同的IO的操作作为一个组。注册事件和回调到domain,当发生一个错误事件或抛出一个错误时,domain对象会被通知,不会丢失上下文环境,也不导致程序错误立即推出,与process.on('uncaughtException')不同。

Domain 模块可分为隐式绑定和显式绑定:

  • 隐式绑定: 把在domain上下文中定义的变量,自动绑定到domain对象
  • 显式绑定: 把不是在domain上下文中定义的变量,以代码的方式绑定到domain对象

方法

序号 方法 & 描述
1 domain.run(function)
在域的上下文运行提供的函数,隐式的绑定了所有的事件分发器,计时器和底层请求。
2 domain.add(emitter)
显式的增加事件
3 domain.remove(emitter)
删除事件。
4 domain.bind(callback)
返回的函数是一个对于所提供的回调函数的包装函数。当调用这个返回的函数被时,所有被抛出的错误都会被导向到这个域的 error 事件。
5 domain.intercept(callback)
和 domain.bind(callback) 类似。除了捕捉被抛出的错误外,它还会拦截 Error 对象作为参数传递到这个函数。
6 domain.enter()
进入一个异步调用的上下文,绑定到domain。
7 domain.exit()
退出当前的domain,切换到不同的链的异步调用的上下文中。对应domain.enter()。
8 domain.dispose()
释放一个domain对象,让node进程回收这部分资源。
9 domain.create()
返回一个domain对象。

属性

序号 属性 & 描述
1 domain.members
已加入domain对象的域定时器和事件发射器的数组。

实例

创建 main.js 文件,代码如下所示:

var EventEmitter = require("events").EventEmitter;
var domain = require("domain"); var emitter1 = new EventEmitter(); // 创建域
var domain1 = domain.create(); domain1.on('error', function(err){
console.log("domain1 处理这个错误 ("+err.message+")");
}); // 显式绑定
domain1.add(emitter1); emitter1.on('error',function(err){
console.log("监听器处理此错误 ("+err.message+")");
}); emitter1.emit('error',new Error('通过监听器来处理')); emitter1.removeAllListeners('error'); emitter1.emit('error',new Error('通过 domain1 处理')); var domain2 = domain.create(); domain2.on('error', function(err){
console.log("domain2 处理这个错误 ("+err.message+")");
}); // 隐式绑定
domain2.run(function(){
var emitter2 = new EventEmitter();
emitter2.emit('error',new Error('通过 domain2 处理'));
}); domain1.remove(emitter1);
emitter1.emit('error', new Error('转换为异常,系统将崩溃!'));

执行以上代码,结果如下所示:

监听器处理此错误 (通过监听器来处理)
domain1 处理这个错误 (通过 domain1 处理)
domain2 处理这个错误 (通过 domain2 处理) events.js:72
throw er; // Unhandled 'error' event
^
Error: 转换为异常,系统将崩溃!
at Object.<anonymous> (/www/node/main.js:40:24)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:929:3

最新文章

  1. HomeWork2
  2. SDUT 2416:Fruit Ninja II
  3. &lt;mvc:annotation-driven /&gt;
  4. HDU 5914 Triangle 【构造】 (2016中国大学生程序设计竞赛(长春))
  5. U3D 自带navmesh自动寻路教学
  6. 对付&quot;反盗链&quot;
  7. .NET Core 2.0迁移技巧之MemoryCache问题修复
  8. ubuntu12.04destdrop删除不必要的软件
  9. 数据库复习总结(6)-SQL语句入门(脚本、命令)
  10. MFC误报内存泄露的修复
  11. iOS开发之Xcode常用调试(Debug)技巧总结
  12. 从壹开始前后端 [vue后台] 之二 || 完美实现 JWT 滑动授权刷新
  13. idea中pom.xml添加了新的maven依赖,点击import changes没反应
  14. nnet3 TDNN chunk, left-context, right-context
  15. oracle使用数据泵进行数据的导入导出
  16. VS2008 快捷键大全
  17. LeetCode——4. Median of Two Sorted Arrays
  18. [z]一个SQL语句分清楚RANK(),DENSE_RANK(),ROW_NUMBER()三个排序的不同
  19. 【struts2】拦截器基础
  20. discuz回贴通知插件实现-获取邮件内容

热门文章

  1. WebApi 基于token的多平台身份认证架构设计
  2. python Django注册页面显示头像
  3. 用委托(Delegate)的BeginInvoke和EndInvoke方法操作线程
  4. 【Python3.6+Django2.0+Xadmin2.0系列教程一】环境搭建及项目创建
  5. .NET Core2.0+MVC 用session,cookie实现的sso单点登录
  6. win7下ubuntu14.4双系统安装
  7. [LeetCode] Exclusive Time of Functions 函数的独家时间
  8. Python网络爬虫笔记(二):链接爬虫和下载限速
  9. 出错信息:Incorrect string value: &#39;\xE4\xBD\xA0\xE5\xA5\xBD&#39; for column &#39;username&#39;
  10. [SCOI2010]生成字符串