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...
])
}