我无法导出以异步方式自己编写的模块。
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不是异步的,我在寻找解决方法时遇到了麻烦。
答案 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.sync
是blocking操作。