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()} );
});
});
});
});
}
Я пытаюсь понять, как сделать это красивее --, поскольку вы можете сказать, что я использую асинхронную библиотеку caolan, но я не уверен, какую из структур потока управления использовать. Кажется, что если я использую, например, async.waterfall, это приводит к значительно большему количеству кода, и каждый шаг должен быть заключен в анонимную функцию. Например, это только первые две строки вложенной версии с водопадом:
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)
})
}])
}
Как бы вы это улучшили?
Если бы был способ частично применять аргументы НЕ только слева, то я мог бы сделать, например,
function indexArticles(callback) {
async.waterfall([
async.apply(fs.readdir, "posts/"),
async.apply(async.map, __, readPost),
async.apply(async.map, __, parse),
// etc...
])
}