我正在遍历文件夹及其子文件夹并尝试将所有.jss文件添加到数组中:
function getJssFromDir(directory,arr) {
fs.stat(directory,function (err, stats) {
if (stats.isFile()) {
//check if its jss file
if (path.extname(directory) === '.jss') {
arr.push(directory);
}
} else if (stats.isDirectory()) {
fs.readdir(directory, function(err, files) {
if (err) throw err;
for (var i=0; i<files.length; i++) {
getJssFromDir(directory+'/'+files[i],arr);
}
});
}
});
}
然后尝试打印它,我什么也看不见:
var array = [];
getJssFromDir('c:/internet',array);
console.log(array);
当我尝试在getJssFromDIR中打印数组时,我做错了什么我看到我要添加的所有文件都被添加到数组中。
答案 0 :(得分:1)
当您读取目录时,您正在读取磁盘。这需要时间。在node.js中,IO操作的任何时间都会进行回调,因为它不会立即执行。
您需要在getJssFromDir
功能中添加回调,然后通过回调来调用它。
但是由于您正在进行递归调用,因此管理所有回调会变得复杂。我已经针对这种情况制作了许多图书馆,我建议findit
var array = [];
var finder = require('findit').find('c:/internet');
finder.on('file', function(file) {
if (path.extname(directory) === '.jss') {
array.push(file);
}
});
finder.on('end', function() {
console.log(array);
});