2017-04-06 14 views
0

私は、NodeJSのような非ブロッキング環境の初心者です。以下は、ディレクトリ内のすべてのファイルを一覧表示し、私の単純なコードは、次のとおりです。ユーザープレス1、それは方法LISTFILEを実行して、内部のすべてのファイルを表示するようにするとしています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); 
      }); 
     } 
    }); 
} 

場合。
私の質問は、fs.readdirSyncが実行されなかった理由です。私がreaddir()でそれを行うとプログラムは動作しますが、出力はユーザに混乱します。

答えて

2

コールバックをfs.readdirSync()に渡していますが、*Sync()関数は通常、コールバックを受け付けません。この場合、コールバックは実行されません。これは、関数がコールバックを取らないため、出力が表示されないためです。しかし、実際にはfs.readdirSync()が実行されます。

fs.readdirSync()は、単にそれが価値だ返します(読みやすいプログラムを作成するだけでなく、呼び出しは、あなたのプログラムがありませんし、それがどのように使われるか内容によってOKとすることができる、ブロックすることを意味している。)

var resultsArray = fs.readdirSync(datafolder); 

(エラー処理についてはtry/catchに梱包してください)

関連する問題