2016-04-04 3 views
1

dynからasync.waterfallでいくつかのファイルを読み込もうとしていますが、私は物事を正しくやっているようですが、指定されたエラーが発生し、readData関数は呼び出されません。どうしましたか?ノード非同期ウォーターフォールコールバックはすでに呼び出されていました

var fs = require("fs"); 
var async = require("async"); 

var folder = "./files/"; 

try { 
    async.waterfall([ 
     function readDir(cb) { 
      fs.readdir(folder, function(err, files) { 
       cb(err, files); 
      }); 
     }, 
     function loopFiles(files, cb) { 
      files.forEach(function(fn) { 
       console.log("loop " + fn); 
       cb(null, fn); 
      }); 
     }, 
     function check(fn, cb) { 
      console.log("check "+fn); 
      fs.stat(folder + fn, function(err, stats) { 
       console.log(stats.isFile()); 
       cb(err, stats, fn); 
      }); 
     }, 
     function readData(stats, fn, cb) { 
      console.log("read "+fn); 
      if (stats.isFile()) { 
       fs.readFile(folder + fn, "utf-8", function(err, data) { 
        cb(err, data); 
       }); 
      } 
     } 
    ], function(err, result) { 
     if (err) { 
      throw err; 
     } 
     console.log(result); 
    }); 
} catch (err) { 
console.log(err); 
} 

答えて

3

問題がfiles.length > 1場合はcb(null, fn)loopFiles()で複数回呼び出しているということです。ファイルごとに別のasync.waterfall()を実行するか、その他の方法を使用する必要があります。

stats.isFile()falseと評価された場合、cb()を呼び出していないその他の問題が1つあります。readData()

関連する問題