我在那里有一个简短的问题:
我正在使用Node.JS编写一个命令行工具,该工具使用JSON Schema验证JSON文件。所以,现在我遇到一个问题,当想要获得所有模式时,我总是因为使用异步函数而得到“未定义”,否则只能同步函数。
对于此命令行工具,不需要异步。
有人可以帮我解决一下如何让它工作得很好吗?
var getJSONSchemaFiles = function (dir) {
results2 = [];
var recursive = require('recursive-readdir');
recursive(dir, function (err, files) {
// Files is an array of filename
// console.log(files);
files.forEach(function (entry) {
if (entry.indexOf(".schema.json") > -1) {
results2.push(entry);
}
});
console.log(results2);
});
return results2;
};
我正在使用npm“recursive-readdir”,但我认为我甚至不需要这样的npm吗?
答案 0 :(得分:1)
好的,这会同步枚举给定路径下的所有文件:
var fs = require('fs');
function recursiveReaddir(path) {
var stat = fs.lstatSync(path);
if(stat.isFile())
return [path];
if(!stat.isDirectory())
return [];
return [].concat.apply([], fs.readdirSync(path).map(function(fname) {
return recursiveReaddir(path + '/' + fname);
}));
}
答案 1 :(得分:0)
使用glob模块https://github.com/isaacs/node-glob。有async和Sync方法,如:glob.sync(pattern,[options]);和glob(pattern,[options],cb);
他们的文档示例:
var glob = require("glob")
// options is optional
glob("**/*.js", options, function (er, files) {
// files is an array of filenames.
// If the `nonull` option is set, and nothing
// was found, then files is ["**/*.js"]
// er is an error object or null.
})