@timonck

Как переписать функцию через промисы?

Добрый день
Мне нужно рекурсивно найти файл по расширению для этого у меня есть
const fs = require('fs');
const path = require('path');

let pathSupplied = './';
let extFilter = 'js';

let extension = (element) => {
    let extName = path.extname(element);
    return extName === '.' + extFilter;
};

let walk = function (dir) {
    fs.readdir(dir, function (err, list) {
        list.forEach((item) => {
            let itemPath = path.join(dir, item);
            fs.stat(itemPath, (e, stats) => {
                if (stats.isDirectory()) {
                    walk(itemPath);
                } else {
                    if(extension(itemPath)){
                        console.log(itemPath)

                    }
                }
            });
        });
    })
}
walk(pathSupplied)


мне нужно записать результат его поиска в массив для этого нужно использовать Promise

не могу понять как мне переписать это через Promise?
Подскажите пожалуйста как это решить ?
  • Вопрос задан
  • 104 просмотра
Пригласить эксперта
Ответы на вопрос 1
@f_ban
const fs = require('fs');
const path = require('path');

let pathSupplied = './';
let extFilter = 'js';

let extension = (element) => {
    let extName = path.extname(element);
    return extName === '.' + extFilter;
};

let walk = function (dir) {
    const result = [];

    fs.readdir(dir, function (err, list) {
        list.forEach((item) => {
            let itemPath = path.join(dir, item);
            fs.stat(itemPath, (e, stats) => {
                if (stats.isDirectory()) {
                    walk(itemPath);
                } else {
                    if(extension(itemPath)){
                        console.log(itemPath)
                        result.push(itemPath);
                    }
                }
            });
        });
    });

    return result;
}

walk(pathSupplied);

walkAsync = (dir)=>{
    return new Promise((resolve)=>{
        resolve(walk(dir))
    });
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы