2016-09-29 30 views
2

我在Node.js中有兩個依賴於對方的測試文件。第一個測試運行一些異步工作,最後用第二個測試需要的UUID導出一個對象。Node.js中異步module.exports依賴關係

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被稱爲異步在第一測試,在測試2 console.log(testOne)只是一個空對象。

我該如何讓test_2.js等到test_1.js完成輸出?

回答

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是進口的時間返回。這影響了如何使用承諾實例。

+0

所以即使我將'testOne.then'註釋掉,'setTimeout'仍然會觸發。這沒有任何意義。而且我怎麼能傳遞參數呢? – Toolkit

+0

我不會導入一個模塊而不消耗它。 – Season

+0

以及我如何傳遞參數?讓我們說延遲時間? thaks – Toolkit