Это действительно плохой шаблон ... чтобы он работал, вы должны написать:
// a.js
const func = async function () {
module.exports.myInstance = 'hello'
}
func()
// b.js
require('./a.js') // trigger the async function
// wait the loading with nextTick or setTimeout (if the operation takes longer)
process.nextTick(() => {
// you must re-run the require since the first execution returns undefined!
console.log(require('./asd.js').myInstance)
})
Как вы видите, это действительно fr agile этот код, основанный на времени и порядке выполнения.
Если вам нужен синглтон, вы можете написать это:
// a.js
let cached
module.exports = async function () {
if (cached) {
return cached
}
cached = 'hello'
return cached
}
// b.js
const factory = require('./a.js')
factory()
.then(salut => { console.log(salut) })