@Tipylja

Как получить массив значений из async рекурсивной функции?

Есть функция, рекурсивная, которая бегает по файловой системе

const scanDir = async (dir, filelist = []) =>{
    const files = await readdir(dir);
    files.forEach(async (file)=>{
        const dirFile = path.join(dir, file);
        try {
            filelist = await scanDir(dirFile, filelist);
        }
        catch (err) {
            if (err.code === 'ENOTDIR' || err.code === 'EBUSY')
            {                
                filelist = await [...filelist, dirFile];
                
            }
            else throw err;
        }
    });

    return filelist;
};

Подключенные модули и функции

const fs = require('fs')
    ,{promisify} = require('util')  
    ,readdir = promisify(fs.readdir)
    ,exists = promisify(fs.exists)
    ,mkdir = promisify(fs.mkdir)
    ,copyFile = promisify(fs.copyFile);


Я наверное что-то не понимаю, опыта мало, но как я вижу, она возвращает массив filelist, который передается в рекурсию дальше.
Но как принять этот массив после окончания работы функции?
То есть вот так не работает:
const myArr = scanDir(dir);
Пробовал это оборачивать в async функцию и ждать пока scanDir разрезолвится, как-то так:
(async()=>{
const myArr = await scanDir(dir);
})()


Но это тоже не работает. Так же еще пробую так:

scanDir(dir).catch(
    (err)=>{
        console.log(err);
    }
).then(

    (data)=>{console.log(data.length)}

);


В data возвращается массив, но он пустой. Подскажите пожалуйста, как правильно получить наполненный массив из функции scanDir?
  • Вопрос задан
  • 95 просмотров
Пригласить эксперта
Ответы на вопрос 1
EShein
@EShein
Shein
Promise.all([массив промисов]).then( (data ) => {})
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы