Javascript Node.js-离开域上下文

Javascript Node.js-离开域上下文,javascript,node.js,error-handling,Javascript,Node.js,Error Handling,我有一个正在运行的方法流,其中一些操作需要一个自包含的域来包装它们的操作 然而,如果方法1有一个域,方法3没有,但碰巧抛出了一个错误。如何防止方法1的域捕获该错误 我遇到的所有领域示例似乎都没有处理这样的问题 人为的例子: enter code here var domain = require('domain'); // should succeed var firstThing = function (next) { var d = domain.create(); d.on(

我有一个正在运行的方法流,其中一些操作需要一个自包含的域来包装它们的操作

然而,如果方法1有一个域,方法3没有,但碰巧抛出了一个错误。如何防止方法1的域捕获该错误

我遇到的所有领域示例似乎都没有处理这样的问题

人为的例子:

enter code here

var domain = require('domain');

// should succeed
var firstThing = function (next) {
  var d = domain.create();

  d.on('error', function (err) {
    console.log('firstThing: Some error occurred', err);
    next(err);
  });

  d.run(function () {
    setTimeout(function () {
      // did some stuff
      console.log('did first thing');
      next();
    }, 100);
  });
};


var goodThing = function (next) {
  console.log('doing good thing');
  next();
};

var badThing = function (next) {
  console.log('doing bad thing');
  throw new Error('death');
  next();
};


firstThing(function (err) {
  console.log('err?', err);
  goodThing(function (err) {
    console.log('err again?', err);
    badThing(function (err) {
      console.log('bad news', err);
    });
  });
});

基本上,我正在寻找一种方法,在域回调之前在“firstThing”中“结束”域。

您能否创建一个支持域的自定义错误类,并为您的所有模块创建一个共享错误处理程序?我可能没有正确理解您,但是,我不这么认为,因为所有这些单独的模块都是非常小的用例,需要能够在许多情况下运行的灵活性,也就是说,可能与任何自定义错误或共享handlershm无关。在这种情况下,为什么还要担心错误在哪里或如何处理?让使用它们的上游开发人员来处理它们?因为,如果我用类似于:
async.series
的东西调用这一系列方法,它永远不会到达最终回调,因为
第一件事
会传递到系列中的下一件事,但是当
第一件事
的域错误处理程序中发现错误时,它再次调用
next
,但这不会退出流程,因此阻止开发人员处理上游错误?您能否创建一个支持域的自定义错误类并为所有模块创建一个共享错误处理程序?我可能没有正确理解您,但是,我不这么认为,因为所有这些单独的模块都是非常小的用例,需要能够在许多情况下运行的灵活性,也就是说,可能与任何自定义错误或共享handlershm无关。在这种情况下,为什么还要担心错误在哪里或如何处理?让使用它们的上游开发人员来处理它们?因为,如果我用类似于:
async.series
的东西调用这一系列方法,它永远不会到达最终回调,因为
第一件事
会传递到系列中的下一件事,但是当
第一件事
的域错误处理程序中发现错误时,它再次调用
next
,但这不会退出流程,因此阻止开发人员处理上游错误?