【发布时间】:2019-10-02 02:01:07
【问题描述】:
在我的代码完成对文件夹层次结构的递归之后,我想使用then(),如下所示。
一切都很好,尤其是使用
const fileNames = await fs.promises.readdir(dir);
和
const stat = await fs.promises.stat(thing_path);
但是,递归部分我不知道如何正确实现
getFolderInfo(start).then((all_data)=>{
console.log('Done recursing the directory');
});
工作正常。
完整文件
const fs = require('fs');
const path = require('path');
// Configure & Initialize
let start = '_t/';
let depth = 1;
let counter = 0;
let total_size = 0;
// Definition
async function recurseFolders(dir, callback) {
const fileNames = await fs.promises.readdir(dir);
const listings = await Promise.all(
fileNames.map(async (thing_name) => {
const thing_path = path.join(dir, thing_name);
const stat = await fs.promises.stat(thing_path);
return {name: thing_name, path: thing_path, size: stat.size, isFolder: stat.isDirectory()};
})
);
listings.forEach(iterate);
function iterate (listing) {
counter++;
total_size += listing.size;
listing.counter = counter;
listing.total_size = total_size;
callback(listing);
if (listing.isFolder) {
recurseFolders(listing.path, callback);
}
}
}
async function getFolderInfo (start) {
await recurseFolders(start, (data) => {
console.log(data);
});
}
getFolderInfo(start).then((all_data)=>{
console.log('Done recursing the directory');
});
【问题讨论】:
-
递归的
recurseFolders调用没有await;这是故意的吗? -
我在调用中添加了一个 await 并创建了函数
iterateasync,但它仍然没有所需的行为。 -
这是节点代码有没有办法让它在stackoverflow上的浏览器中运行?
-
观察到的行为是什么?顺便说一句,您现在没有填充
all_data。 -
控制台记录“完成递归目录”的地方应该完成递归目录。
all_data只是它开始工作时的占位符。
标签: javascript node.js recursion promise