我正在使用 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 函数有一个回调,带有两个参数 err
和 result
。
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/