如何异步输出模块中的NodeJS

时间:2019-02-02 16:57:54

标签: javascript node.js asynchronous

我无法导出以异步方式自己编写的模块。

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 :(得分:1)

在回调回调时解决:

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");

答案 1 :(得分:0)

我将改为导出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.syncblocking操作。