使用累加器遍历Node.js异步目录

我想获取包含在使用节点的子目录的目录中的唯一文件名列表,并且在合并每个回调的结果时遇到了一些麻烦。我想避免对重复项进行操作,如果我只是从fs.stat回调中记录文件名,就会发生这种情况

var distinct = {};

function getNames(root) {
    fs.readdir(root, function(err, list) {
        list.forEach(function(file) {
            file = root + '/' + file; 
            fs.stat(file, function(err, stat) {
                if (!err && stat.isDirectory()) {
                    getNames(file);
                } else {
                    distinct[path.basename(file)] = true;
                }
            });
        });
    });
}

// perform various operations on unique filename list
console.log(Object.keys(distinct));

当然,这调用该console.log()函数为时过早,并且会产生不希望的结果。如何获得一组可使用的文件名;是否有一种使用async方法做到这一点的好方法,即,不必使用readdirSyncand statSync

尼克爪

异步模块将在这里成为您的朋友。

var distinct = {};
function getNames(root, callback) {
    fs.readdir(root, function(err, list) {
        if (err) return callback(err);   

        async.each(list, function(file, done) {
            fs.stat(file, function(stat) {
                if (err) return done(err);
                if (stat.isDirectory()) return getNames(file, done);
                distinct[path.basename(file)] = true;
                done();
            });
        }, function(err) {
            // called when all done or error
            callback(err, distinct);
        })
    });
}

然后你可以像这样使用它

getNames('path/to/dir', function(distinct) {
    // logic
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用累加器遍历Node.js异步目录

来自分类Dev

JS reduce:对象累加器标题

来自分类Dev

Bacon.js累加器

来自分类Dev

在 JS 中查找累加器的属性

来自分类Dev

如何在Rx.Net中使用异步累加器实现ScanAsync运算符?

来自分类Dev

用累加器遍历jQuery对象?

来自分类Dev

在分机上使用累加器

来自分类Dev

使用累加器的树的大小

来自分类Dev

使用累加器的树的大小

来自分类Dev

仅使用Node.js进行异步HTTP(S)遍历

来自分类Dev

pyspark矩阵累加器

来自分类Dev

列表累加器在Erlang

来自分类Dev

列表累加器在Erlang

来自分类Dev

Erlang导致累加器

来自分类Dev

使用Clojure中的累加器进行映射?

来自分类Dev

Data.Vector,使用累加器进行映射

来自分类Dev

F#–使用累加器映射列表

来自分类Dev

使用数组作为Scala foldLeft累加器

来自分类Dev

Prolog使用累加器在列表中查找元素

来自分类Dev

使用数组reduce typescript将类型赋予累加器

来自分类Dev

Haskell使用累加器与Parsec进行解析

来自分类Dev

使用累加器连接数字列表

来自分类Dev

如何使用OpenCL内核来做累加器?

来自分类Dev

使用Clojure中的累加器进行映射?

来自分类Dev

如何使用HashMap折叠作为累加器?

来自分类Dev

在类的无序映射中使用滚动累加器

来自分类Dev

Groovy/Scala - 使用累加器迭代时提前中止

来自分类Dev

在 xslt 3.0 中使用累加器无法正常工作

来自分类Dev

使用对象作为累加器的数组减少