Здравствуйте, подскажите пожалуйста. У меня есть задача по nodejs в которой нужно вывести список файлов и папок какой нибудь директории. Вызовы файловой системы должны быть асинхронными. На входе функция принимает путь до папки, а на выходе 2 массива, один под файлы другой под папки.
У меня получилось сделать функцию которая шерстит по файлам и папкам, а так же записывает их в массивы. Но у меня появились проблемы с асинхронностью. Из-за того что функция проходит что то на подобии рекурсии а функции вызываются асинхронно, я не могу отследить когда заканчивается последний вызов и не могу забрать полный результат(все более менее работает если поставить setTimeout на 1 сек, результаты собираются все, но каждый раз индексы меняются местами)
вот код который у меня сейчас есть:
let root = (dir) => {
return new Promise((resolve, rejects) => {
try {
let results = {
arrFile: [],
arrDir: []
}
const getRoot = async (dir) => {
await readdir(dir, (err, files) => {
if (err)
throw Error('FILES_ERROR');
files.forEach((el) => {
const pathEl = join(dir, el);
stat(pathEl, (err, stats) => {
if (err)
throw Error('STAT_ERROR');
if (stats && stats.isDirectory()) {
results.arrDir.push(pathEl);
getRoot(pathEl);
} else {
results.arrFile.push(pathEl);
//условие выхода
if(files.length === 1){
resolve(results)
}
}
});
})
})
}
getRoot(dir)
setTimeout(() => {
console.log('check timeout', results);
}, 500);
} catch (error) {
if(error) throw Error('ERROR')
}
})
}
root(test).then(result => console.log(result))
иногда мое условие выхода дает правильный результат) если успеет)
Подскажите что не так? что почитать? я уже 100 раз перечитываю promise, async/await но ничего не могу понять… Что можно почитать, или может я изначально не правильно начал? может изначально такая функция не подходит?…. уже не знаю за что браться)