2017-04-06 114 views
0

我是非阻塞环境(如NodeJS)的初学者。下面是我的一些简单的代码,其中列出目录中的所有文件:NodeJS readdirSync()未执行

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()来执行该程序,该程序将工作,但会将输出混淆为用户。

回答

2

您正在将回调传递给fs.readdirSync(),但*Sync()函数通常不会采用回调。在这种情况下,回调永远不会运行,因为函数没有回调,所以你看不到输出。但实际上fs.readdirSync()确实执行。

fs.readdirSync()简单地返回它的值(这可能使程序更易于阅读,但也意味着调用将阻塞,这可能是OK取决于你的程序做什么以及如何使用它。)

var resultsArray = fs.readdirSync(datafolder); 

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