异步退出节点域时出现问题

Trouble with exiting node domain asynchronously

本文关键字:问题 退出 节点 异步      更新时间:2023-09-26
是否可以根据域

entered时间异步exit域?我的领域"堆叠"心理模型显然是不够的,因为我预计这会成功:

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');
    });
});

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

我希望能理解为什么会失败。

好的,

我想我支持了我对域如何工作的心理模型:

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

因此,一旦你越过异步间隙,域"堆栈"就会丢失,只剩下活动域。