Когда ваш обратный вызов на readFile
выполняется, цикл for уже завершится. Таким образом, i
будет files.length
, а files[i]
будет undefined
. Чтобы смягчить это, вам нужно обернуть переменные в замыкание. Самый простой способ сделать это - создать функцию, которая выполняет ваш readFile
вызов, и вызывать ее в цикле:
function read(file) {
require('fs').readFile(file, 'utf8', function (error,data) {
cache[file]=data;
});
}
for(var i = 0; i < files.length; i++){
read(files[i]);
}
Для еще лучшего контроля выполнения, вы можете посмотреть async :
function readAsync(file, callback) {
fs.readFile(file, 'utf8', callback);
}
async.map(files, readAsync, function(err, results) {
// results = ['file 1 content', 'file 2 content', ...]
});
Редактировать: Использовать вспомогательную функцию для асинхронного примера.