title: How does bluebird know to proceed to the next `then` in this chain?
body: <p>Having promisified fs-extra, I understand that I can use <code>then</code> to access the files. I <em>guess</em> there is some mechanism there that after it gets the file it knows to move to the next link in the <code>then</code> chain. However, the next <code>then</code> I've just put a simple for-loop. And the next one just prints a line to the console. I would expect some sort of Promise object to be returned for it to move down the chain. What is required to proceed down this chain? For example, if I put in a setTimeout for a second, then chain continues and prints out of order. </p>
  
  <pre><code>var Promise = require('bluebird')
    , fs = Promise.promisifyAll(require('fs-extra'))
  
  fs.readdirAsync(dir)
      .bind(this)
      .then((files) =&gt; {
          this.files = files;
      })
      .then(() =&gt; {
          var num = 10000
          this.files.forEach((file, index, array) =&gt; {
              for(i = 0; i &lt; num; i++){
                  console.log(num*i);
              }
          });
      })
      .then(() =&gt; {
          console.log('middle of it');
      })
      .then(() =&gt; {
          console.log('done with it');
      })
      .catch((err) =&gt; {
          console.log(err);
      });
  </code></pre>