1

是否可以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');
    });
});

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

我很感激理解为什么会失败。

4

1 回答 1

1

好的,我想我巩固了我对域如何工作的心理模型:

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

因此,一旦您跨越异步间隙,域“堆栈”就会丢失,并且只保留活动域。

于 2015-01-27T18:53:00.003 回答