异步退出节点域的麻烦

时间:2015-01-27 08:32:36

标签: javascript node.js node.js-domains

exit是否可以entered字段异步var Domain = require('domain'); var assert = require('assert'); var outerDomain = Domain.create(); outerDomain.name = 'outer'; outerDomain.run(function() { var innerDomain = Domain.create(); innerDomain.name = 'inner'; innerDomain.enter(); setImmediate(function() { assert.strictEqual(process.domain.name, 'inner'); process.domain.exit(); // This assertion is failing because process.domain is undefined! assert.strictEqual(process.domain.name, 'outer'); }); }); ?我的“堆栈”域名心理模型显然不够,因为我预计这会成功:

{{1}}

第二个断言失败,因为没有活动域,而我希望“外部”域是活动的。

我很欣赏对其失败原因的理解。

1 个答案:

答案 0 :(得分:1)

好的,我认为我支持了域名运作的心理模型:

当我调用setImmediate时,匿名函数仅绑定到活动域,而不知道整个域“堆栈”。

因此,一旦跨越异步间隙,域“堆栈”就会丢失,只剩下活动域。