Node.js 域中的NodeJS抛出错误是否停止全局执行?

Node.js 域中的NodeJS抛出错误是否停止全局执行?,node.js,error-handling,Node.js,Error Handling,给定如下设置: var domain = require('domain'); // Keep the script running, even after main context actions are done setInterval(function() { console.log('Ping!'); }, 2000); var d = domain.create(); d.on('error', function(er) { console.log('error', er)

给定如下设置:

var domain = require('domain');

// Keep the script running, even after main context actions are done
setInterval(function() {
  console.log('Ping!');
}, 2000);

var d = domain.create();
d.on('error', function(er) {
  console.log('error', er);
  // Don't re-throw the error, to continue execution
});

var x = 0;
d.run(function() {
  x = 1;
  x = 2;
  throw new Error('Stop!');
  x = 3;
  x = 4;
  console.log('done inside domain');
});

console.log('Done!', x);
正如预期的那样,抛出的错误被域的“
on('error')
”侦听器捕获,并继续执行“Ping!”消息,直到终止进程

我原以为“域内完成”消息永远不会出现,但我惊讶地发现“完成!”消息和
x
的最终输出没有显示

如果我改为使用事件:

var domain = require('domain');
var events = require('events');
var util = require('util');

setInterval(function() {
  console.log('Ping!');
}, 2000);

var MyWorker = function MyWorker() {
  events.EventEmitter.call(this);
};
util.inherits(MyWorker, events.EventEmitter);

var d = domain.create();
d.on('error', function(er) {
  console.log('error', er);
});

var x = 0;
d.run(function() {
  x = 1;
  x = 2;
  var w = new MyWorker();
  w.emit('error', new Error('Stop!'));
  x = 3;
  x = 4;
  console.log('done inside domain');
});

console.log('Done!', x);
我得到了“done IN domain”消息和X现在为4的输出

但我希望域内的执行在该点停止,但在
d.run()之后继续外部作用域。换句话说,我需要一个“
Done!2
”行,显示域中的执行在
x
为2时停止,并且外部上下文继续处理。可能吗?我尝试从
d.on('error')
侦听器中调用
d.dispose()
d.exit()
,但这仍然导致
x
为4,并看到“在域内完成”消息