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,例如,會導致更多的代碼,每一步都必須包裝在一個匿名函數中。例如,這只是瀑布的前兩行嵌套版本:重構嵌套回調,Node.js的,異步
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...
])
}
雖然'瀑布'可能會結束更多的字符,我認爲它會結束更可讀性。同時檢查'apply'以幫助完成所有這些匿名功能。 – 2012-07-17 00:45:45
你可以看看我剛發佈的瀑布例子,告訴我是否正確嗎? – 2012-07-17 01:04:31