Массив значений из 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,
forEach на обычный цикл for...of замените, и будет вам счастье. |
Цитата:
|
Часовой пояс GMT +3, время: 07:11. |