Async module.exports Node.js中的依赖项

时间:2016-09-29 00:33:25

标签: javascript node.js require

我在Node.js中有两个相互依赖的测试文件。第一个测试运行一些异步工作,最后导出一个具有第二个测试所需的UUID的对象。

test_1.js

'use strict';

# simulate some async work
setTimeout(() => {
    module.exports = {
        id: '83b50527-73a9-4926-8247-e37547f3da6d'
    };
}, 2000);

test_2.js

'use strict';

const testOne = require('./test_1.js');
console.log(testOne);

问题是因为module.exports在第一次测试中被称为async,在测试中,console.log(testOne)只是一个空对象。

如何让test_2.js等到test_1.js完成导出?

1 个答案:

答案 0 :(得分:3)

承诺拯救是一种时尚。

<强> test_1.js

module.exports = new Promise(resolve => {
  setTimeout(() => resolve({
    id: '83b50527-73a9-4926-8247-e37547f3da6d'
  }), 2000);
});

<强> test_2.js

const testOne = require('./test_1.js');
testOne.then(uuid => console.log(uuid.id));

请注意,每次导入 test_1.js 时都会返回相同的promise实例。这会影响承诺实例的使用方式。