Node.js Domain 模块
2024-09-17 21:25:17
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
最新文章
- HomeWork2
- SDUT 2416:Fruit Ninja II
- <;mvc:annotation-driven />;
- HDU 5914 Triangle 【构造】 (2016中国大学生程序设计竞赛(长春))
- U3D 自带navmesh自动寻路教学
- 对付";反盗链";
- .NET Core 2.0迁移技巧之MemoryCache问题修复
- ubuntu12.04destdrop删除不必要的软件
- 数据库复习总结(6)-SQL语句入门(脚本、命令)
- MFC误报内存泄露的修复
- iOS开发之Xcode常用调试(Debug)技巧总结
- 从壹开始前后端 [vue后台] 之二 || 完美实现 JWT 滑动授权刷新
- idea中pom.xml添加了新的maven依赖,点击import changes没反应
- nnet3 TDNN chunk, left-context, right-context
- oracle使用数据泵进行数据的导入导出
- VS2008 快捷键大全
- LeetCode——4. Median of Two Sorted Arrays
- [z]一个SQL语句分清楚RANK(),DENSE_RANK(),ROW_NUMBER()三个排序的不同
- 【struts2】拦截器基础
- discuz回贴通知插件实现-获取邮件内容
热门文章
- WebApi 基于token的多平台身份认证架构设计
- python Django注册页面显示头像
- 用委托(Delegate)的BeginInvoke和EndInvoke方法操作线程
- 【Python3.6+Django2.0+Xadmin2.0系列教程一】环境搭建及项目创建
- .NET Core2.0+MVC 用session,cookie实现的sso单点登录
- win7下ubuntu14.4双系统安装
- [LeetCode] Exclusive Time of Functions 函数的独家时间
- Python网络爬虫笔记(二):链接爬虫和下载限速
- 出错信息:Incorrect string value: &#39;\xE4\xBD\xA0\xE5\xA5\xBD&#39; for column &#39;username&#39;
- [SCOI2010]生成字符串