递归完成后的操作

时间:2017-03-25 20:39:03

标签: javascript node.js recursion

我写了一个函数,它遍历目录并分析文件,但我不知道如何检测整个过程已经完成(它分析了所有目录和子目录中的所有文件)所以我可以做结果就是这样。

我使用了递归,但我还在学习它,我知道它不是很正确,所以我想寻求帮助。

const path = require('path');
const fs = require('fs');
const _ = require('lodash');

let result = {};

const goThroughDirs = parentPath => {
    const stat = fs.statSync(parentPath);

    if (stat.isDirectory()) {
        _.each(fs.readdirSync(parentPath), child => goThroughDirs(path.join(parentPath, child)));
    } else {
        analyseFile(parentPath)
            .then(response => {
                result = _.merge({}, result, response);
            });
    }
};

goThroughDirs(path.join(__dirname, 'rootDir'));

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

鉴于你已经在使用promises,它就像

一样简单
function goThroughDirs(parentPath) {
    const stat = fs.statSync(parentPath);

    if (stat.isDirectory()) {
        return Promise.all(_.map(fs.readdirSync(parentPath), child =>
//      ^^^^^^ ^^^^^^^^^^^   ^^^
            goThroughDirs(path.join(parentPath, child))
        )).then(responses =>
            _.merge({}, ...responses);
        );
    } else {
        return analyseFile(parentPath);
//      ^^^^^^
    }
}

goThroughDirs(path.join(__dirname, 'rootDir')).then(result => {
    // it's done
    console.log(results);
});