2015-10-11 48 views
2

我試圖將名稱與來自特定目錄的所有文件的路徑一起散列。散列之後,我將散列保存到數組(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

是的,你只是想念你的fs.readdir函數是一個異步回調。

因此,當您從外部撥打console.log(hash_orig)時,實際上回調尚未完成。

使用超時,你的陣列將填充:

setTimeout(function(){ 
    console.log(hash_orig); 
},500); 
4

fs.readdir是一個異步函數。當達到console.log(hash_orig)時,readdir的回調尚未調用。 將日誌語句放在回調結束處,您將看到結果。

+1

或者使用'readdirSync' – brandonscript