Node.js fs.readdir,fs.stat

我正在通过一些教程,并不明白为什么这行“self.only_dirs.push(文件[我]);” 正在导致一个关于“未定义”的错误。 这必须是一个variables范围的问题,但没有我试过的工作。 怎么做我需要声明variables,以便这些embedded式callback函数识别它们?

function load_album_list(callback, callback2) { var self = this; fs.readdir ( 'albums', function (err, files) { if(err) { callback(err, null); return; } var only_dirs = []; var remaining = files.length; for (var i = 0; i < files.length; i++) { fs.stat("albums/" + files[i], function(err, stats) { if(stats.isDirectory()) { self.only_dirs.push(files[i]); } console.log("remaining: " + self.remaining); self.remaining -= 1; if (self.remaining == 0) callback(null, self.only_dirs); } ); } callback(null, only_dirs); } ); } 

 function load_album_list(callback, callback2) { var self = this; self.only_dirs = []; //<----- declare only_dirs in this scope fs.readdir ( 'albums', function (err, files) { if(err) { callback(err, null); return; } //var only_dirs = []; <--- remove this reference var remaining = files.length; for (var i = 0; i < files.length; i++) { fs.stat("albums/" + files[i], function(err, stats) { if(stats.isDirectory()) { self.only_dirs.push(files[i]); } console.log("remaining: " + self.remaining); self.remaining -= 1; if (self.remaining == 0) callback(null, self.only_dirs); } ); } callback(null, self.only_dirs); } ); }