function indexArticles(callback) {
fs.readdir("posts/", function(err, files) {
async.map(files, readPost, function(err, markdown) {
async.map(markdown, parse, function(err, results) {
async.sortBy(results, function(obj, callback) {
callback(err, obj.date);
}, function(err, sorted) {
callback({"articles": sorted.reverse()});
});
});
});
});
}
estoy tratando de encontrar la manera de hacer esto más bonita - como se puede decir que estoy usando la biblioteca asíncrona de Caolan, pero no estoy seguro de cuál de las controlar estructuras de flujo para usar. Parece que si uso async.waterfall, por ejemplo, resulta en un poco más de código, y cada paso debe estar envuelto en una función anónima. Por ejemplo, estas son solo las dos primeras líneas de la versión anidada con cascada:devoluciones de llamadas anidadas Refactoring, Node.js, asincrónicos
function indexArticles(callback) {
async.waterfall([
function(callback) {
fs.readdir("posts/", function(err, files) {
callback(err, files)
})
},
function(files, callback) {
async.map(files, readPost, function(err, markdown) {
callback(err, markdown)
})
}])
}
¿Cómo mejorarías esto?
Si hubiera una manera de aplicar parcialmente argumentos no sólo de la izquierda, yo podía ver haciendo, por ejemplo,
function indexArticles(callback) {
async.waterfall([
async.apply(fs.readdir, "posts/"),
async.apply(async.map, __, readPost),
async.apply(async.map, __, parse),
// etc...
])
}
Si bien 'waterfall' podría terminar con más caracteres, creo que terminará siendo mucho más legible. También consulte 'apply' para ayudar con todas esas funciones anon. –
¿Puedes echar un vistazo al ejemplo de la cascada que acabo de publicar y decirme si lo estoy haciendo bien? –