Please stop spreading FUD.
With promises (Bluebird) this sounds like very little code in practice, assuming promisifyAll has been called the FS module:
- One line to read all files in a directory
- Map them with .map to a .stat call on them, returning array of promises.
- Reduce them to the largest element.
Something like:
var fs = Promise.promisifyAll(require("fs"));
var largest = fs.readdirAsync("/your/file/path").map(function(file){
return fs.statAsync(file);
}).reduce(function(x,y){
return (x.size > y.size) ? x : y;
});
With arrow syntax:
var largest = fs.readdirAsync("/your/file/path").
map((file) => fs.statAsync(file)).
reduce((x,y) => (x.size > y.size) ? x : y);
Alternatively, with Generators using Bluebird promises
var largest = Promise.coroutine(function *largest(dirname){
var files = yield fs.readdirAsync(dirname);
var sizes = yield files.map(name => fs.statAsync(name));
return files.reduce((x,y) => x.size > y.size ? x : y);
});
If one error occurs, the promise rejects. VERY far from 27 lines of code. Not to mention you can of course compose these in one line if you extract them to methods like in your code:
var largest = fs.readdirAsync("/your/file/path").map(fs.statAsync).reduce(largest);