我需要使用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;
});
});