Javascript未知undefined返回

时间:2015-11-04 07:12:51

标签: javascript node.js

运行此代码时,我一直收到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

有人可以向我解释为什么会这样吗?谢谢

3 个答案:

答案 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。