title: async.js waterfall in node.js: how to use bind and this?
body: <p>I'm learning node.js coming from a PHP background with a limited JavaScript level. I think I got over now the change of mindset implied by the asynchronous approach. And I love it.</p>
  
  <p>But, as many others before me, I quickly understood the concrete meaning of the "pyramid of doom".</p>
  
  <p>So I build these little 'dummy' route and view to understand how to properly use Async.js. I just spend the last 5 hours writing the following code (rewritten of course tens of times). It works, but I wonder how I could go further and made this code more simple (less verbose, easier to read and maintain).</p>
  
  <p>I found many resources on the web and especially here, but always by bits of info here and there. </p>
  
  <p><strong>I'm guessing at this point that I should use "bind" and "this" with async.apply to make to shorten the 2 last functions called by the waterfall.</strong></p>
  
  <p><strong>The issue is to get the object "db" defined so I can use the "collection" method on it (for the second function).</strong></p>
  
  <p>I really searched an example in Google, but it's surprising that you don't get straightforward examples looking for "async waterfall bind" (as well as many keyword variations I tried). There are answers of course but none seems relevant to this particular issue... ore, quite possibly, I haven't understood them.</p>
  
  <p>Can someone help me on this? I'll be quite grateful.</p>
  
  <pre><code>app.get('/dummy',
  
      function(req, res) {
  
          var MongoClient = require('mongodb').MongoClient;
  
          async.waterfall(
              [
                  async.apply(MongoClient.connect, 'mongodb://localhost:27017/mybdd'),
  
                  function(db, callback) {
                      db.collection('myCollection', callback);
                  },
  
                  function(collection, callback) {
                      collection.find().sort({"key":-1}).limit(10).toArray(callback);
                  }
  
              ], function(err, results) {
                  if (err) console.log('Error :', err);
                  else { res.render('dummy.jade', { title:'dummy', results: results} ); }
              }
          );
  
      }
  
  );
  </code></pre>