我正在尝试将名称与特定目录中的所有文件的路径一起散列。在散列之后,我将散列保存到数组中(hash_orig)。这就是我所做的。
var fs = require('fs');
var Hashes = require('jshashes');
var path = process.argv[2];
var path_elements = new Array();
var hash_orig = new Array();
fs.readdir(path, function(err, items) {
console.log('\nNumber of files in the directory: '+items.length);
console.log('Hashing algorithm: SHA1')
for (var i=0; i<items.length; i++) {
path_elements.push(path+"/"+items[i])
var SHA1 = new Hashes.SHA1().b64(path_elements[i])
console.log([i+1]+':\t'+items[i]+"\t" + SHA1)
hash_orig.push(SHA1);
}
});
console.log(hash_orig)
问题:
问题在于,当我将哈希值推送到hash_orig
数组并尝试在函数fs.readdir
之外访问它时,数组hash_orig
为空。 (console.log(hash_orig)
)
我需要在外部访问它,以便执行进一步的比较操作,以确定哈希是否已更改为验证文件名称和路径的完整性。 我做错了什么? 谢谢。
答案 0 :(得分:4)
fs.readdir
是异步函数。到达console.log(hash_orig)
时,readdir
的回调尚未调用。
将log-statement放在回调的末尾,您将看到结果。
答案 1 :(得分:0)
是的,您只是错过了fs.readdir
功能是异步回调。
因此,当您从外部呼叫console.log(hash_orig)
时,实际上回调尚未完成。
使用超时,您的阵列将被填充:
setTimeout(function(){
console.log(hash_orig);
},500);