Массив myfiles пуст, потому что обратный вызов не был вызван до вызова console.log ().
Вам нужно сделать что-то вроде:
var fs = require('fs');
fs.readdir('./myfiles/',function(err,files){
if(err) throw err;
files.forEach(function(file){
// do something with each file HERE!
});
});
// because trying to do something with files here won't work because
// the callback hasn't fired yet.
Помнитевсе в узле происходит одновременно, в том смысле, что, если вы не выполняете свою обработку внутри обратных вызовов, вы не можете гарантировать, что асинхронные функции еще не завершены.
Один из способов решения этой проблемы для вас -использовать EventEmitter:
var fs=require('fs'),
EventEmitter=require('events').EventEmitter,
filesEE=new EventEmitter(),
myfiles=[];
// this event will be called when all files have been added to myfiles
filesEE.on('files_ready',function(){
console.dir(myfiles);
});
// read all files from current directory
fs.readdir('.',function(err,files){
if(err) throw err;
files.forEach(function(file){
myfiles.push(file);
});
filesEE.emit('files_ready'); // trigger files_ready event
});