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を使用すると、かなり多くのコードが生成され、各ステップを無名関数でラップする必要があるようです。たとえば、これはウォーターフォールのあるネストされたバージョンの最初の2行にすぎません。
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...
])
}