JSFiddle - React, Tailwind, and code Playground

JavaScript

var cache = {};
function writeJson() {
  fs.writeFile(JSON.stringify(cache), cb)
}
fs.readdir(__dirname, function(err, data) { // Читаем текущую директорию
    if (err) throw err; // Обработали ошибку, если есть
    var fcount = data.length
    data.forEach(function(item) { // Для каждой папки в директории начинаем перебор
    			fcount--
          if (isFolder(item)) { // Если это - папка, то продолжаем
              cache[item] = {}; // Наименование папки(муз.альбом) - объект, кот. будет хранить данные о нем
              fs.readdir(__dirname + `/${item}`, function(err, songList) { // Читаем внутренности папки(альбома)
                  let songArray = [], // Найденные песни копим сюда
                      cover = null; // Контейнер для кавера для альбома
                  if (err) throw err;
                  songList.forEach(function(song) { // Для каждой песни в альбоме
                      if (isSong(song)) { // Если это - песня, а не фотография или еще чего, то добавляем в массив
                          songArray.push(song);
                      } else if (isPic(song)) { // Если фотография - присваиваем её переменной
                          cover = song;
                      }
                  }); // Цикл перебора для текущей папки(альбома) закончен, запускается следующий
                  cache[item] = { // Тут мы присваиваем данные объекту(item-название альбома)
                      songs: songArray, // Массив с песнями
                      cover: cover // Кавер для альбома
                  };
                  if(fcount <= 0) writeJson()
              });
          }
          else {
          	if(fcount <= 0) writeJson()
          }
    });
});