【发布时间】:2018-06-24 15:14:51
【问题描述】:
我正在尝试使用 Node.js 的“fs”模块制作文件资源管理器。
我编写了以下函数,它接受一个路径并将该路径(文件/文件夹)的内容存储在一个数组中,然后使用回调将其发送回。
listDir: function (path, myCallback) {
var resultObj = [];
fs.readdir(path, function (err, data) {
console.log('In listDir');
if (err) {
return myCallback(err, null);
} else {
data.forEach(function (value) {
fs.lstat(path + '/' + value, function (err, stats) {
if (err) {
console.log(err);
} else {
//console.log('Size-' + stats.isFile()+'\n');
if(stats.isFile()){
//console.log('is file----\n');
/*resultObj.push({
type: 'file',
name: value,
size: stats['size']
});*/
resultObj.push(value);
console.log(resultObj+'\n');
} else if(stats.isDirectory()){
//console.log('is folder----\n');
/*resultObj.push({
type: 'folder',
name: value,
size: stats['size']
});*/
resultObj.push(value);
console.log(resultObj+'\n');
}
}
});
});
console.log('Resultant obj-' + resultObj);
return myCallback(null, resultObj);
}
});
}
对于存储在“数据”中的每个文件/文件夹,我正在尝试检查它是文件还是文件夹,并且取决于我想将对象推送到我的“resultObj”数组中。 但是,return 语句甚至在 forEach 完成之前就被执行,因此我每次都得到一个空的 resultObj。
为什么会这样?为什么即使我提供了回调函数,它也会异步运行?
当我使用路径参数调用 /test 路由时,输出是这样的--
在列表目录中
结果 obj-
GET /test?path=F:\dummyFolder 304 15.210 毫秒 - -
文件1
文件 1,文件 2
文件 1、文件 2、文件夹 3
请帮帮我,我真的被这个必须在今晚完成的任务所困。并且在任务不使用'fs'模块的任何同步函数中也特别提到了这一点。 那么我如何才能牢记该条款呢?
PS:不要介意cmets,我用它们来调试。
【问题讨论】:
标签: javascript node.js callback node-modules fs