示例
使用以下代码创建一个名为main.js的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处理'));
// 新建domain2
var domain2 = domain.create();
domain2.on('error', function(err) {
console.log("domain2处理了此错误 ("+err.message+")");
});
// Implicit binding
domain2.run(function() {
var emitter2 = new EventEmitter();
emitter2.emit('error',new Error('由domain2处理'));
});
domain1.remove(emitter1);
emitter1.emit('error', new Error('转换为异常。 系统会崩溃!'));
尝试一下
现在运行main.js以查看结果-
验证输出。
侦听器处理了此错误 (由侦听器处理)
domain1处理了此错误 (由domain1处理)
domain2处理了此错误 (由domain2处理)
events.js:291
throw er; // Unhandled 'error' event
^
Error: 转换为异常。 系统会崩溃!
at Object. (/var/www/nodejs/Tmp5f2218b75e6411596070071.js:38:24)
at Module._compile (internal/modules/cjs/loader.js:1201:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1221:10)
at Module.load (internal/modules/cjs/loader.js:1050:32)
at Function.Module._load (internal/modules/cjs/loader.js:938:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
at internal/main/run_main_module.js:17:47
Emitted 'error' event at:
at Object. (/var/www/nodejs/Tmp5f2218b75e6411596070071.js:38:10)
at Module._compile (internal/modules/cjs/loader.js:1201:30)
[... lines matching original stack trace ...]
at internal/main/run_main_module.js:17:47