Refactoring nested callbacks, node.js, async
===

    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()} );
            });
          });
        });
      });
    }
I'm trying to figure out how to make this prettier -- as you can tell I'm using caolan's async library, but I'm not sure which of the control flow structures to use. It seems like if I use async.waterfall, for example, that results in quite a bit more code, with each step having to be wrapped in an anonymous function.

How would you improve this?