-1
我想从一个特定的目录中读取所有(文本)文件,它是递归的所有子目录。我能够读取文件并将结果附加到全局变量。但我想在所有操作结束时访问变量。我正在尝试承诺,但我无法访问它。请帮助 节点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
});
如果我理解你的问题是什么,你要添加'then'和'catch'到你的递归调用:'getFolderTree(current_path).then(/ * do something * /)。catch(/ * handle error * /);'另外,如果我正确地读你的代码, '循环不会做你想做的事。而且你会希望确保你的承诺在任何情况下都能解决/拒绝。 –