Мне нужно рекурсивно сканировать каталог для определенного типа файлов (в данном случае .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;
});
});