rjs2006
rjs2006

Reputation: 21

Node.js fs.readdir, fs.stat

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

Answers (1)

sctskw
sctskw

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

Related Questions