Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.08.2018, 17:46
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

Массив значений из 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')
    ,path = require('path')
    ,jimp = require('jimp')
    ,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?

Последний раз редактировалось Tipylja, 25.08.2018 в 17:50.
Ответить с цитированием
  #2 (permalink)  
Старый 25.08.2018, 20:21
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Tipylja,
forEach на обычный цикл for...of замените, и будет вам счастье.
Ответить с цитированием
  #3 (permalink)  
Старый 26.08.2018, 12:07
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

Сообщение от destus Посмотреть сообщение
Tipylja,
forEach на обычный цикл for...of замените, и будет вам счастье.
Все работает! Спасибо=)))
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
массив из значений дат от указанной tiho Общие вопросы Javascript 5 28.12.2012 10:04
Упорядочить заданный числовой массив X (M) в порядке убывания значений его элементов rjabijj Общие вопросы Javascript 6 06.07.2012 21:34
Упорядочить заданный числовой массив X (M) в порядке убывания значений его элементов. Drimmer Серверные языки и технологии 0 02.07.2012 18:22
Массив из значений eq() andreysolo jQuery 5 14.10.2011 16:07
Использование значений в функции klubnichkaaa Общие вопросы Javascript 1 13.10.2011 14:11