Node.js教程 Domain 模块浅析
沉沙 2018-06-06 来源 : 阅读 602 评论 0

摘要:Node.js Domain(域) 简化异步代码的异常处理,可以捕捉处理try catch无法捕捉的异常。希望阅读本篇文章以后大家有所收获,帮助大家对Node.js的理解更加深入。

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

var domain = require("domain")

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

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

· 隐式绑定: 把在domain上下文中定义的变量,自动绑定到domain对象

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

 

方法

1domain.run(function):在域的上下文运行提供的函数,隐式的绑定了所有的事件分发器,计时器和底层请求。

   

2domain.add(emitter):显式的增加事件

   

3domain.remove(emitter):删除事件。

   

4domain.bind(callback):返回的函数是一个对于所提供的回调函数的包装函数。当调用这个返回的函数被时,所有被抛出的错误都会被导向到这个域的 error 事件。

   

5domain.intercept(callback):和 domain.bind(callback) 类似。除了捕捉被抛出的错误外,它还会拦截 Error 对象作为参数传递到这个函数。

   

6domain.enter():进入一个异步调用的上下文,绑定到domain。

   

7domain.exit():退出当前的domain,切换到不同的链的异步调用的上下文中。对应domain.enter()。

   

8domain.dispose():释放一个domain对象,让node进程回收这部分资源。

   

9domain.create():返回一个domain对象。

   

 

属性

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

 

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注WEB前端Node.js频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程