Как экспортировать модуль асинхронно в nodejs - PullRequest
0 голосов
/ 02 февраля 2019

Я не могу экспортировать модуль, который написал сам, асинхронно.

const glob = require('glob');

var confFiles;

glob("conf/**/*.conf", function (er, files) {
    confFiles = files;
});

module.exports = new Promise(function(resolve, reject) {
    resolve(confFiles);
});

Это сам модуль, и я хочу получить доступ к confFiles в других файлах, но дело в том, что globне асинхронный, и у меня возникают проблемы с поиском пути ее решения.

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Вместо этого я экспортирую load метод:

// conf.js
const glob = require('glob')

module.exports.load = () => new Promise((resolve, reject) => {
  glob('conf/**/*.conf', function (err, files) {
    if (err) return reject(err)

    resolve(files)
  })
})

А затем в пользовательском пространстве:

// index.js
const conf = require('./conf.js')

conf.load()
  .then(files => {
    console.log(files)
  })

Или вы можете просто использовать globe.sync вместо этого и избегайте работы с асинхронным кодом полностью:

// conf.js
const glob = require('glob')

module.exports = glob.sync('conf/**/*.conf')

А затем в пользовательском пространстве:

// index.js
const files = require('./conf.js')
console.log(files)

Просто имейте в виду, что globe.sync является блокировкой операция.

0 голосов
/ 02 февраля 2019

Разрешение при обратном вызове:

module.exports = new Promise(function(resolve, reject) {
  glob("conf/**/*.conf", function (err, files) {
   if(err) reject(err) else resolve(files);
  });
}));

Или немного короче:

 const glob = require("glob");
 const { promisify } = require("util");

module.exports = promisify(glob)("conf/**/*.conf");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...