title: JavaScript ES6 promise for loop
body: <pre><code>for (let i = 0; i &lt; 10; i++) {
      const promise = new Promise((resolve, reject) =&gt; {
          const timeout = Math.random() * 1000;
          setTimeout(() =&gt; {
              console.log(i);
          }, timeout);
      });
  
      // TODO: Chain this promise to the previous one (maybe without having it running?)
  }
  </code></pre>
  
  <p>The above will give the following random output:</p>
  
  <pre><code>6
  9
  4
  8
  5
  1
  7
  2
  3
  0
  </code></pre>
  
  <p>The task is simple: Make sure each promise runs only after the other one (<code>.then()</code>).</p>
  
  <p>For some reason, I couldn't find a way to do it.</p>
  
  <p>I tried generator functions (<code>yield</code>), tried simple functions that return a promise, but at the end of the day it always comes down to the same problem: <strong>The loop is synchronous</strong>.</p>
  
  <p>With <a href="https://caolan.github.io/async/" rel="noreferrer">async</a> I'd simply use <code>async.series()</code>.</p>
  
  <p>How do you solve it?</p>