2016-09-29 6 views
2

У меня есть два тестовых файла в Node.js, которые зависят друг от друга. Первый тест запускает некоторую асинхронную работу, а в конце экспортирует объект с UUID, что требует второй тест.Async module.exports зависимость в Node.js

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 называется асинхронной в первом тесте, в тесте два 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

Смежные вопросы