节点,递归目录扫描以查找特定文件类型

时间:2019-04-15 22:10:26

标签: javascript node.js promise

我需要使用Promises递归地扫描目录以查找特定文件类型(在本例中为.hbs返回模板)。但是我似乎无法全力以赴地在递归的正确位置返回promise。

我已经看到了很多有关使用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;
        });
    });

0 个答案:

没有答案