我创建了一个填充对象列表的函数,但它们没有被写入。
if (stats.isDirectory()) {
objlist=[];
//do something here.. the path was correct
fs.readdir(path, (err, files) => {
objlist=[];
for(file in files){
//console.log(files[file])
objlist[file]={};
fs.stat(path + '\\' + files[file], function(err,stats){
if(err)
throw err;
if(stats.isDirectory()){
objlist[file]['file'] = 'folder'
}
if(stats.isFile()){
objlist[file]['file'] = 'file'
}
objlist[file]['name'] = files[file]
objlist[file]['size'] = stats.size
//console.log(objlist)
//console.log(stats)
});
}
});
console.log(objlist);
return objlist;
}
但是该函数返回一个空的objlist;你能告诉我我做错了吗
答案 0 :(得分:1)
这段代码将是helphul。使用let file in files
objlist=[];
//do something here.. the path was correct
fs.readdir(path, (err, files) => {
objlist=[];
for(let file in files){
objlist[file]={};
fs.stat(path + '\\' + files[file], function(err,stats){
if(err)
throw err;
if(stats.isDirectory()){
objlist[file]['file'] = 'folder'
}
if(stats.isFile()){
objlist[file]['file'] = 'file'
}
objlist[file]['name'] = files[file]
objlist[file]['size'] = stats.size
if(file == files.length-1) {
console.log(objlist);
}
});
}
});
答案 1 :(得分:0)
您必须使用方法push
将对象添加到数组中,如下所示:
objlist=[];
for(file in files){
obj = {};
obj.file = file;
//... do all stuff with obj
objlist.push(obj);
}
此外,您的函数在fs.readdir
内是异步的,因此如果您必须在函数中构建和填充,或者等待接收结果。
否则你将调用该函数,它将异步执行,你将继续执行main函数而不等待fs.readdir
的响应,并且数组将继续为空,因为你的异步函数可能会也可能不会已被执行。
答案 2 :(得分:0)
您的代码中有两个错误: -
1)您正在使用数组作为对象
2)因为for循环是同步循环,你在其中尝试异步任务,因此要么使用fs的同步版本,要么改变你的for循环,如下所示: -
for(file in files) {
obj = {};
obj[file]={};
(function(f){
fs.stat(path + '\\' + files[f], function(err,stats){
if(err)
throw err;
if(stats.isDirectory()){
obj[file]['file'] = 'folder'
}
if(stats.isFile()){
obj[file]['file'] = 'file'
}
obj[file]['name'] = files[file]
obj[file]['size'] = stats.size
objlist.push(obj)
//console.log(objlist)
//console.log(stats)
});
}
}(file))
}