NodeJS - 为什么Promise中的当前域未定义?

hap*_*set 3 try-catch node.js promise

我创建域并运行它.现在,当输入域时process.domain指向当前活动域.但后来我运行Promise并得到一些奇怪的东西.

'use strict';

var domainCreate = require('domain').create;

var domain = domainCreate();
domain.requestId = 1;
domain.run(function() {
    console.log(process.domain === domain); // true
    console.log(process.domain.requestId); // 1
    Promise.resolve().then(function() {
        console.log(process.domain === domain); // false!!!
        console.log(process.domain.requestId); // throw new TypeError('Cannot read property 'requestId' of undefined')
    }).catch(function(err) {
        console.error(err.stack);
    });
});
Run Code Online (Sandbox Code Playgroud)

为什么process.domain在Promise链中变得不确定?

rob*_*lep 6

原生承诺和域名不混合.这里有一个问题,在这里在那里的提及(这里)是:

我现在还没有深入研究V8的原生承诺是如何实现的,但如果证明有必要修补它们以便与域一起工作,我也不会感到惊讶.

并且该线程中的最新评论(此处)表明这仍然是Node v6的问题(它是).

对该问题的评论之一表明,使用第三方承诺实现bluebird可能会更好(您的示例代码将使用它),但鉴于域被认为是一个黑客(因此已被弃用) ,我认为您应该考虑重新实现代码而不使用域.