无法访问函数外部的数组元素

时间:2015-10-11 16:00:05

标签: javascript arrays node.js hash

我正在尝试将名称与特定目录中的所有文件的路径一起散列。在散列之后,我将散列保存到数组中(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)

我需要在外部访问它,以便执行进一步的比较操作,以确定哈希是否已更改为验证文件名称和路径的完整性。 我做错了什么? 谢谢。

2 个答案:

答案 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);