javascript - 需要帮助思考如何异步编程

标签 javascript node.js asynchronous

我正在使用 NodeJS 遍历文件列表并为每个文件生成一个 MD5 哈希值。以下是我通常同步执行此操作的方式:

// Assume files is already populated with an array of file objects
for(file in files) {
   var currentFile = files[file];
   currentFile.md5 = md5(file.path);
}

这里的问题是 MD5 函数是异步的,并且实际上有一个回调函数,一旦为文件生成了 MD5 哈希值就会运行该回调函数。因此,我所有的 currentFile.md5 变量都将被设置为未定义。

一旦我获得了所有文件的所有 MD5 哈希值,我就需要转到另一个函数来处理该信息。

为了让我异步执行此操作,代码会变得多粗糙?完成我想做的事情的最干净的方法是什么?是否有我应该注意的常见不同方法?

最佳答案

要多次调用异步函数,您应该创建一个函数并像这样递归调用它。

我假设你的 md5 函数有一个回调,带有两个参数 errresult

var keys = Object.keys(files); // taking all keys in an array.

function fn() {
    var currentFile = files[keys.shift()];
    md5(currentFile, function (err, result) {
            // Use result, store somewhere

            // check if more files
        if (keys.length) {
            fn();
        } else {
            // done
        }
    });
}

关于javascript - 需要帮助思考如何异步编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21300174/

相关文章:

javascript - 多个fs.write追加到同一个文件能保证执行顺序吗?

javascript - 将 for..in 循环与 Promise 和异步函数结合使用

java - 当写入数据多于读取数据时,NIO 会失败

javascript - CSS/JavaScript : Apply javascript according to window width

javascript - knockout 可见绑定(bind)不起作用

node.js - Visual Studio Code - Node 应用程序与 Chrome 调试器冲突

angularjs - Node.js 可写流创建错误的文件(更大且不可读)

javascript - 如何在元素内使用 Javascript 绘制正方形?

javascript - Mapbox 标记符号颜色变化

node.js - 如何修复 "Here is no default audio device configured"语音转文本