2017-07-28 9 views
-1

すべての(テキスト)ファイルを特定のディレクトリから読み込み、再帰的にsubdirecotyです。ファイルを読み込んでその結果をグローバル変数に追加できました。私はすべての操作の最後に変数にアクセスしたいです。私は約束をしているが、私はそれにアクセスすることができない。私は解決策を見つけたと思いますが、私はまだそれがどのように機能するかについて混乱しています ノードjs再帰関数付きの約束

var file_path = `C:\\Users\\HP\\Desktop\\test_folder`; 
 
const fs = require('fs'); 
 
var final_array = []; 
 

 
let getFolderTree = function(file_path) { 
 
    return new Promise(function(resolve, reject) { 
 

 
    fs.readdir(file_path, function(err, folders) { 
 
     if (err) { 
 

 
     console.log("error reading folder :: " + err); 
 

 
     } else { 
 

 
     if (folders.length !== 0) { 
 

 
      for (let i = 0; i < folders.length; i++) { 
 

 
      if (folders[i].endsWith("txt")) { 
 

 
       let text_file_path = file_path + `\\` + folders[i]; 
 
    
 
       fs.readFile(text_file_path, function(error_read, data) { 
 
       if (error_read) { 
 
        console.log("error reading " + error_read); 
 
       } else { 
 
        
 
        return resolve(final_array.push(data));// want to access final_array at the end of all operations 
 
       } 
 
       }); 
 
       
 
      } else { 
 
       let current_path = file_path + `\\` + folders[i]; 
 
       getFolderTree(current_path); 
 
      } 
 
      } 
 
     } 
 
     } 
 
    }); 
 
    }); 
 
} 
 
getFolderTree(file_path).then(function() { 
 
    console.log(final_array); // this is not working 
 
});

+0

を理解する助けてください よりよい解決策を持っているなら、私に知らせてください、あなたは 'then'を追加しますcatch(/ * handle error * /); 'また、あなたのコードを読んでいるなら、あなたの' for() 'ループは、あなたが望んでいることをするつもりはありません。そして、あなたはいつでもあなたの約束が解決/拒否されるようにしたいと思うでしょう。 –

答えて

0

を助けてください。

私は別のコードから参考にして、いくつかのことを理解することができました。

誰かがまた、私はあなたの質問が何であるかを理解していた場合、私はコード

var fs = require('fs'); 
 
var path = require('path'); 
 
let root_path = "C:\\Users\\HP\\Desktop\\test_folder"; 
 

 
function getAllDirectoriesPath(current_path) { 
 
    var results = []; 
 
    return new Promise(function (resolve, reject) { 
 
     fs.readdir(current_path, function (erro, sub_dirs) { 
 
      if (erro) { 
 
       console.log(error); 
 
      } else { 
 
       let no_of_subdir = sub_dirs.length; 
 
       if (!no_of_subdir) { 
 
        return resolve(results); 
 
       } else { 
 
        sub_dirs.forEach(function (dir) { 
 
         dir = path.resolve(current_path, dir); 
 
         fs.stat(dir, function (err, stat) { 
 
          if (stat && stat.isDirectory()) { 
 
           getAllDirectoriesPath(dir).then(function (res) { 
 
            results = results.concat(res); 
 
            if (!--no_of_subdir) { 
 
             resolve(results); 
 
            } 
 
           }); 
 
          } else { 
 
           fs.readFile(dir, function (err, data) { 
 
            results.push(data.toString()); 
 
            if (!--no_of_subdir) { 
 
             resolve(results); 
 
            } 
 
           }); 
 

 
          } 
 
         }); 
 
        }); 
 
       } 
 
      } 
 
     }); 
 
    }); 
 
} 
 

 
getAllDirectoriesPath(root_path).then(function (results) { 
 
    console.log(results); 
 
});

関連する問題