运行此代码时,我一直收到undefined
:
var fs = require('fs'),
path = require('path'),
filepath = process.argv[2];
function listFilesByExtension(path_to_file, ext) {
fs.readdir(path_to_file, function (err, files) {
if (err) {
console.log(err);
} else {
console.log(files);
}
});
}
console.log(listFilesByExtension(filepath, 'txt'));
console.log(files)
返回:
undefined
[ 'CHANGELOG.md',
'LICENCE.md',
'README.md',
'api.html',
'dat',
'data.dat',
'data.json',
'learnyounode.dat',
'learnyounode.sql',
'learnyounode.txt',
'md',
'w00t.dat',
'w00t.txt',
'words.dat',
'wrrrrongdat' ]
因此undefined
不在那里,console.log(err)
也会返回null
。
有人可以向我解释为什么会这样吗?谢谢
答案 0 :(得分:3)
这是因为您的listFilesByExtension
函数未返回任何内容,因此此函数调用的console.log
将输出undefined
。
这一行是原因:
console.log(listFilesByExtension(filepath, 'txt'));
如果您从此行中移除console.log
表单,则意外undefined
将会消失。
listFilesByExtension(filepath, 'txt');
答案 1 :(得分:0)
函数listFilesByExtension()确实返回undefined,因为没有任何return语句。 还有一个名为asynchronous function的代码,因此此代码永远不会返回您想要的内容。
您应该尝试同步功能https://nodejs.org/api/fs.html#fs_fs_readdirsync_path
例如:
function listFilesByExtension(path, ext) {
var filtered,
dirContent = fs.readdirSync(path);
// do your filtering by extension here.
// The filtered will be an Array of paths filtered out from the dirContent
return filtered;
}
注意:如果路径不存在,则没有任何错误处理
答案 2 :(得分:-1)
如果您在浏览器控制台中写道:console.log('Hello, World!');
它将打印
你好,世界!
未定义
那是因为console.log();
返回undefined。