Есть ли способ получить доступ к module.exports.myInstance в функции из другого файла? - PullRequest
0 голосов
/ 06 августа 2020

Я хочу получить доступ к module.exports.myInstance в функции из другого файла, который просто выглядит так, как показано ниже.

// a.js
const func = async function () {
  ...
  module.exports.myInstance = ...;
}
func();

// b.js
const module = require("a.js").myInstance;
console.log(module);

Мне нужно поместить module.exports внутри функции, потому что мне есть с чем работать жду, чтобы получить myInstance. Я пробовал это и проверял, но у меня undefined при console.log(module). Разве это не возможный формат? Если да, что мне делать, чтобы это сработало?

1 Ответ

0 голосов
/ 06 августа 2020

Это действительно плохой шаблон ... чтобы он работал, вы должны написать:

// 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) })
...