Reputation: 21
I'm working through some tutorials and cannot understand why this line "self.only_dirs.push(files[i]);" is causing an error about it being 'undefined'. This must be a variable scope problem but nothing I have tried has worked. How to do I need to declare variables so that these embedded callback functions recognize them?
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);
}
);
}
Upvotes: 2
Views: 796
Reputation: 1598
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);
}
);
}
Upvotes: 2