Javascript 未执行NodeJS readdirSync()

Javascript 未执行NodeJS readdirSync(),javascript,node.js,Javascript,Node.js,我是非阻塞环境的初学者,比如NodeJS。下面是我的简单代码,其中列出了目录中的所有文件: var readline = require('readline'); var rl = readline.createInterface(process.stdin, process.stdout); var fs = require('fs'); var datafolder = './datafolder'; var datafoldername = 'datafolder'; rl.setPr

我是非阻塞环境的初学者,比如NodeJS。下面是我的简单代码,其中列出了目录中的所有文件:

var readline = require('readline');
var rl = readline.createInterface(process.stdin, process.stdout);
var fs = require('fs');

var datafolder = './datafolder';
var datafoldername = 'datafolder';

rl.setPrompt('Option> ');
rl.prompt();
rl.on('line', function(line) {
    if (line === "right") rl.close();

    if (line == '1') {
        listFile();
    }

    rl.prompt();
}).on('close', function() {
    process.exit(0);
});

function listFile() {
    console.log(`File(s) on ${datafolder}`);
    fs.readdirSync(datafolder, (err, files) => {
        if (err) {
            console.log(err);
        } else {
            files.forEach(filename => {
                console.log(filename);
            });
        }
    });
}
如果用户按1,则假定执行方法listFile并显示其中的所有文件。

我的问题是,为什么不执行fs.readdirSync?如果我使用readdir()执行此操作,程序会工作,但它会将输出混乱到用户。

您正在将回调传递给
fs.readdirSync()
,但是
*Sync()
函数通常不接受回调。在这种情况下,回调永远不会运行,因为函数不接受回调,所以您看不到任何输出。但是
fs.readdirSync()
实际上是执行的

fs.readdirSync()
只返回它的值(这可能使程序更易于阅读,但也意味着调用将被阻止,这可能是正常的,具体取决于程序的功能和使用方式。)

(您可能希望将其包装在
try/catch
中以进行错误处理。)

var resultsArray = fs.readdirSync(datafolder);