Узел, рекурсивное сканирование каталогов для определенного типа файлов - PullRequest
0 голосов
/ 16 апреля 2019

Мне нужно рекурсивно сканировать каталог для определенного типа файлов (в данном случае .hbs, возвращая шаблоны), используя Promises. Но, похоже, я не могу обернуться, возвращая обещание в правильном месте рекурсии.

Я видел множество примеров использования Promises, но, похоже, не могу реализовать его в моем конкретном случае, так как кажется, что они делают не совсем это, а только что-то подобное.

Следующее - в основном случайный беспорядок, выбранный в произвольной точке, испробовав буквально все, что я могу придумать. Итак, это, конечно, не работает, но просто чтобы дать подсказку «где» я застрял:

// 'utils.readdirAsync' and 'utils.getFile' return a Promise of both dirs and files respectively.

    return utils.readdirAsync( views_dir )
    .then(function( files ) {
        const view_files = [];

        // files = files.filter(function( e ) {
        //  return path.extname(e).toLowerCase() === '.hbs';
        // });

        files.map( file => {
            fs.stat( views_dir + '/' + file, function ( err, stats ) {
                if ( stats.isFile() ) {
                    let promise = new Promise( function( resolve, reject ) {
                        let view = utils.getFile( views_dir + file );

                        if ( view ) {
                            view_files.push( view );
                            // resolve( view );
                        } else {
                            reject( "Loading of file: " + view + " failed!" );
                        }
                    });

                    return promise;
                } else if ( stats.isDirectory() ) {
                    /**
                     * Recurse dir ...
                     */
                    utils.readdirAsync( views_dir );
                }
            });
        });

        return Promise.all( view_files )
        .then(function ( result ) {
    console.log("Final result", result);
            return result;
        });
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...