我试图重构我的代码以使它更好用。我想做的是采用Node回调并将结果或错误作为JavaScript对象传回。看起来范围规则阻止我这样做,所以是否有一种直接的方式来做到这一点,或者我被困在回调中(除非我做一些时髦的事情,比如在JavaScript中实现Promises,谷歌搜索显示的是所有的很酷的孩子们这些天都在做什么?)
我仍然对JavaScript不太满意 - 我认为可能有一种更简单的方法可以做到这一点而我只是没有得到它,因为我还没有完成它的工作(我知道jQuery我可以在承诺中设置&#39;这样可以访问我的外部范围,但是我不确定如何使用Node,或者我可以这样做。< / p>
/*
* Retrieves the full list of only the files, excluding subdirectories, in the directory provided.
*
* Parameters:
* dir: The directory to get the file list from.
*
* Return: An object containing either an error message or the fileList as a String array.
* e.g.
* { errMsg: undefined,
* fileList: ["file1.txt", "file2.xlsx"]
* }
*/
var getFileList = function (dir) {
var filterOutDirectories = function (files) {
return files.map(function (file) {
return path.join(dir, file);
}).filter(function (file) {
return fs.statSync(file).isFile();
});
};
var result = {
errMsg: null,
fileList: null
};
fs.readdir(dir, function (err, files) {
if (err) {
result.errMsg = "Error: Could not retrieve files...\n\t" + err;
} else {
result.fileList = filterOutDirectories(files);
}
});
console.log(result.fileList); // returns null
console.log(result.errMsg); // also returns null
return result;
}
答案 0 :(得分:1)
readdir是异步调用,因此回调后设置的变量在调用后不能直接使用。