Друзья, подскажите пожалуйста, как запустить коллбек функцию после того как полностью соберется объект root. Слышал, что нужно использовать Promises, но ума не приложу, как это сделать, когда у меня вложенные асинхронные функции. Вот кусок кода, где собирается объект root:
let regexp_title = /<title>(.*?)<\/title>/i
let regexp_chapter = /<meta chapter="(.*?)" order="([0-9]+)">/i
let root = {
name: 'Global',
file: null,
children: []
};
fs.readdir(dataFolder, (err, fileNames) => {
for (var i = 0, len = fileNames.length; i < len; i++) {
if(path.extname(fileNames[i]) === '.html'){
fs.readFile(dataFolder+fileNames[i], (err, data) => {
let dataChapter = regexp_chapter.exec(data)[1];
if(dataChapter.indexOf('\\') !== -1){
let chapters = dataChapter.split('\\');
let parentLeaf = null;
for(var j=0, jlen = chapters.length; j < jlen; j++){
if(parentLeaf === null) {
if(!objTraverse.findFirst(root, 'children', {name:chapters[j]})) {
root['children'].push({
name:chapters[j],
children:[],
file:null
});
}
} else {
if(!objTraverse.findFirst(root, 'children', {name:chapters[j]})) {
if(objRef = objTraverse.findFirst(root, 'children', {name:parentLeaf})) {
objRef['children'].push({
name:chapters[j],
children:[],
file:null
});
}
}
}
parentLeaf = chapters[j];
}
}
})
}
}
})