【发布时间】:2014-03-21 00:18:39
【问题描述】:
var getfiles = function (context) {
var scriptPath = '/var/names/myfolder';
fs.readdir(scriptPath, function (err, files) {
if (err) return context.sendJson(err, 404);
var resultingJson = {};
for (var j = 0; j < files.length; j++) {
subfolder = scriptPath + files[j];
console.log(files[j]);// prints art,creation
fs.readdir(subfolder, function (err, fi) {
//fi prints [artdetails.txt,artinfo.txt]
// [creationdetails.txt,create.txt]
// console.log(files[j]);// prints undefined here
resultingJson[files[j]] = fi;
});
}
console.log(resultingJson); // returing {}
context.sendJson(resultingJson, 200);
});
}
以上代码用于获取子文件夹 myfolder 中的文件,它包含 art,creation 并且在此艺术文件夹中包含文件 artdetails.txt,artinfo.txt 创建文件夹包含文件 creationdetails.txt,create.txt 等。
文件夹和文件已成功获取,但我想生成JSON 格式,如下所示:
{`art':['artdetails',artinfo],'creation':['creationdetails','create']} format
这怎么可能?
我使用了resultingJson[files[j]] = fi;,但它返回{}.
我的代码有什么问题?
【问题讨论】:
-
readdir是异步。在读取目录之前,您正在调用context.sendJson(resultingJson, 200);。解释和解决方法请看How to return the response from an AJAX call?(即使是关于Ajax,概念都是一样的)。 -
我阅读了这篇文章,但我不知道我的代码做了什么更改?我该如何更改?