Javascript 在函数内部调用时,fs.readdir返回未定义

Javascript 在函数内部调用时,fs.readdir返回未定义,javascript,node.js,fs,Javascript,Node.js,Fs,我正在尝试编写一个函数,它采用一个路径并返回该目录中的所有文件 当我这样做时: function getDirectories(path) { fs.readdir(path, function(err, content) { if (err) { return err; } else { return content; } }); } console.log(getDirectories('./XML/')); function ge

我正在尝试编写一个函数,它采用一个路径并返回该目录中的所有文件

当我这样做时:

function getDirectories(path) {
  fs.readdir(path, function(err, content) {
    if (err) {
      return err;
    } else {
      return content;
    }
  });
}

console.log(getDirectories('./XML/'));
function getDirectories(path) {
  fs.readdir(path, function(err, content) {
    if (err) {
      return err;
    } else {
      console.log(content);
    }
  });
}
我在控制台中没有定义

但当我这么做的时候:

function getDirectories(path) {
  fs.readdir(path, function(err, content) {
    if (err) {
      return err;
    } else {
      return content;
    }
  });
}

console.log(getDirectories('./XML/'));
function getDirectories(path) {
  fs.readdir(path, function(err, content) {
    if (err) {
      return err;
    } else {
      console.log(content);
    }
  });
}
我得到了预期的数组,文件名为字符串


我做错了什么?

fs.readdir是异步的。请使用以下命令:

function getDirectories(path, callback) {
    fs.readdir(path, function (err, content) {
        if (err) return callback(err)
        callback(null, content)
    })
}

getDirectories('./XML', function (err, content) {
    console.log(content)
})

fs.readdir是异步的,请使用以下命令:

function getDirectories(path, callback) {
    fs.readdir(path, function (err, content) {
        if (err) return callback(err)
        callback(null, content)
    })
}

getDirectories('./XML', function (err, content) {
    console.log(content)
})

我也遇到了同样的问题,我使用fs.readdirSync解决了这个问题

function getDirectories(path) {
  fs.readdirSync(path, function(err, content) {
    if (err) {
      return err;
    } else {
      return content;
    }
  });
}

应该可以工作

我遇到了同样的问题,我使用fs.readdirSync解决了这个问题

function getDirectories(path) {
  fs.readdirSync(path, function(err, content) {
    if (err) {
      return err;
    } else {
      return content;
    }
  });
}

应该工作

its,因为readdir是异步的-尝试使用fs.readdirSyncits,因为readdir是异步的-尝试使用fs.ReadDirSyncIt这也返回undefined这也返回undefined