javascript - 异步读取文件 - 异步读取所有文件并找到最大值

标签 javascript node.js

我有一本包含很多文件的字典,每个文件中的文本都是整数。 我想异步检查所有文件并找到最大数量。

最好的方法是什么???

此代码是同步的:

"use strict";
var fs = require('fs');
var dir = process.argv[2];

fs.readdir(dir, function (err, filesNames) {
    if (err) throw err;
    var max = Number.MIN_VALUE;

    filesNames.forEach(function (fileName) {
        //a synchronous function
        var file = fs.readFileSync(dir + fileName, 'utf-8');
        var num = parseInt(file);

        max = max < num ? num : max;
    });
    console.log(max);
});

但是我想要一个异步函数! 我已经尝试过,但我确信还有更好的方法。

这是我的异步函数:

"use strict";
var fs = require('fs');
var dir = process.argv[2];

fs.readdir(dir, function (err, filesNames) {
    if (err) throw err;
    var max = Number.MIN_VALUE;

    var i = 0;
    filesNames.forEach(function (fileName) {        
        //an asynchronous function
        fs.readFile(dir + fileName, 'utf-8', function (err, file) {
            if (err) throw err;

            var num = parseInt(file);
            max = max < num ? num : max;

            i++;
            if (i == filesNames.length) {
                console.log(max);
            }
        });
    });
});

最佳答案

从广泛使用的解决方案开始 - async包裹。它正在为您完成大部分工作。

这是一些异步教程:

https://github.com/justinklemm/nodejs-async-tutorial

因此,如果您确实有大量文件,可以使用 async.eachasync.eachLimit

Async 解决了 Node.js 中几乎所有的异步情况

关于javascript - 异步读取文件 - 异步读取所有文件并找到最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33276896/

相关文章:

Javascript - 单击每个选项循环选择选项

javascript - 如何更改图表的特定网格线的颜色

javascript - Promise 中的代码执行和使用 return 语句

node.js - 本地安装Gulp失败

javascript - 如何在 node.js 中解压缩 .gz 字符串

node.js - 如何使用 React 在 Keystone.js 中使用自定义模板?

javascript - 试图重复任何 string.ex- "hello"--> 'hheelloo' 的双字母但卡在 for 循环中,有什么解决方案吗?

javascript - 根据选择打印值

javascript - 为什么 'error' 变量重新分配在功能范围内不是 catch{} block ?

javascript - 如何在 Sequelize 中进行自加入?